【问题标题】:How to return only distinct results within one column, while allowing duplicates in other columns?如何只返回一列中的不同结果,同时允许其他列中的重复?
【发布时间】:2020-04-28 15:34:50
【问题描述】:

我很难弄清楚如何输出我想要的东西。我只想从一列中删除重复项,同时允许其他列中的重复项。我正在使用主键和外键连接三个表(a、b、c)。这就是我所拥有的,有人会解释如何修改此查询以输出在 COLU2 中具有唯一值的记录,同时仍允许在周围的列(COLU1、COLU3)中重复?

查询:

DECLARE @Email NVARCHAR(50)
SET @Email = 'user@email.com'
SELECT a.nameF, a.nameL, a.email b.TestName, c.testScore FROM a
INNER JOIN b
ON a.a_primaryKey=b.a_foreignKey
INNER JOIN c
ON b.b_primaryKey=c.b_foreignKey
WHERE a.email = '%' + @Email + '%'

当前输出:

    COLU1      | COLU2 | COLU3
------------------------------
user@email.com | test1 | 80
user@email.com | test1 | 90
user@email.com | test2 | 83
user@email.com | test3 | 89

愿望清单输出:

    COLU1      | COLU2 | COLU3
------------------------------
user@email.com | test1 | 80
user@email.com | test2 | 83
user@email.com | test3 | 89

我在 SELECT 和 GROUP BY 之后尝试了 DISTINCT,但我无法让它工作。谢谢大家。

【问题讨论】:

    标签: mysql sql group-by inner-join min


    【解决方案1】:

    我只想从一列中删除重复项,同时允许其他列中的重复项。

    使用聚合:您想要保留其不同值的所有列都转到GROUP BY 子句,您可以在另一列上使用聚合函数:

    SELECT a.nameF, a.nameL, a.email b.TestName, MIN(c.testScore) score
    FROM a
    INNER JOIN b ON a.a_primaryKey=b.a_foreignKey
    INNER JOIN c ON b.b_primaryKey=c.b_foreignKey
    WHERE a.email = '%' + @Email + '%'
    GROUP BY a.nameF, a.nameL, a.email b.TestName
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多