【问题标题】:SQL : select distinct of one column while ignoring other columnsSQL:选择一列的不同而忽略其他列
【发布时间】:2011-12-24 01:30:41
【问题描述】:

所以我有一张这样的桌子:

---------
id, keyid
---------
1,  3
1,  5
1,  6
2,  1
2,  1
2,  3
4,  1

I want the output of the query to be
1,3
2,1
4,1

如果我使用 select distinct(id,keyid) from table 它会应用 distinct 对 id,keyid 而不仅仅是 id。

【问题讨论】:

    标签: mysql sql sql-server-2005 sql-server-2008 tsql


    【解决方案1】:
    select id, min(keyid) from tbl group by id
    

    【讨论】:

    • 这是要走的路。一般来说,至少理解这种思维方式会好得多,而不是到处应用 distinct。
    【解决方案2】:

    如果您想要每个 Id 的 KeyId 的最小值,那么 user194076 的答案肯定会起作用。

    如果您希望每个 Id 的 KeyId 的第一个出现值,您可以使用:

    
    WITH CTE AS (
       SELECT Id, KeyId, ROW_NUMBER() OVER (PARTITION BY Id ORDER BY Id) AS RN
       FROM tbl
    )
    
    SELECT Id, KeyId FROM CTE WHERE RN = 1
    

    我已经使用STATISTICS IOSTATISTICS TIME 进行了测试,它们在性能方面似乎是相同的,所以实际上取决于您的确切需求。

    【讨论】:

      猜你喜欢
      • 2023-02-26
      • 1970-01-01
      • 1970-01-01
      • 2020-04-23
      • 2022-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多