选择Top 1 ID, DISTINCT字段



我有一个表样表如下:

ID | City
--------------
1  | New York
2  | San Francisco
3  | New York
4  | Los Angeles
5  | Atlanta

我想为每个城市选择不同的City和TOP ID。例如,从概念上讲,我想做以下事情

SELECT TOP 1 ID, DISTINCT City
FROM Cities

应该给我:

ID | City
--------------
1  | New York
2  | San Francisco
4  | Los Angeles
5  | Atlanta

因为New York出现了两次,所以在这个例子中它取的是第一个ID 1

但是我得到错误:

列的城市。ID'在选择列表中无效,因为它既不包含在聚合函数中也不包含在GROUP BY子句中。

试试:

SELECT min(ID), City
FROM Cities
Group by City

MIN函数用于从两个New York城市中选择一个ID

你需要在GROUP BY中设置你的城市

SELECT MIN(ID), City
FROM Cities
GROUP BY City

更一般的解决方案是使用row_number来获取表的其他详细信息:

select * from
(select *, row_number() over(partition by City order by ID) as rn from Cities)
where rn = 1

但是对于这个特殊的表,只需要分组就可以了:

select City, Min(ID) as ID
from Cities
group by City

如果您有一个复杂的场景,Group By不能使用,您可以使用Row_Number()函数与公共表表达式

;WITH CTE AS
(
   SELECT ID, City, ROW_NUMBER() OVER (PARTITION BY City ORDER BY Id) rn
   FROM YourTable
)
SELECT Id, City
FROM CTE
WHERE rn = 1

最新更新