我有一个表样表如下:
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