Sql server 如何编写sql查询以在使用聚合函数的查询中获取主键

Sql server 如何编写sql查询以在使用聚合函数的查询中获取主键,sql-server,Sql Server,我的表结构如下所示: 我想要州内人口最多的城市的id(主键) 如果在特定状态下的最大人口数有一个平局,则应选择这些行中的任何一个id 试试这个: select id, state, population from tbl_city a where id = (select top 1 id from tbl_city where state = a.state order by population DESC) 试试这个: select id, state, population from

我的表结构如下所示:

我想要州内人口最多的城市的id(主键)

如果在特定状态下的最大人口数有一个平局,则应选择这些行中的任何一个id

试试这个:

select id, state, population
from tbl_city a
where id = (select top 1 id from tbl_city where state = a.state order by population DESC)
试试这个:

select id, state, population
from tbl_city a
where id = (select top 1 id from tbl_city where state = a.state order by population DESC)

为此使用窗口功能:

with cte as(select *, row_number() 
                      over(partition by state order by population desc, id) rn from table)
select * from cte where rn = 1
如果可以有多行具有最大填充,则可以尝试使用
rank
函数,而不是
行数

with cte as(select *, rank() 
                      over(partition by state order by population desc) rn from table)
select * from cte where rn = 1

为此使用窗口功能:

with cte as(select *, row_number() 
                      over(partition by state order by population desc, id) rn from table)
select * from cte where rn = 1
如果可以有多行具有最大填充,则可以尝试使用
rank
函数,而不是
行数

with cte as(select *, rank() 
                      over(partition by state order by population desc) rn from table)
select * from cte where rn = 1
您可以尝试以下代码:

SELECT * FROM (
   SELECT id, state, population,
      ROW_NUMBER() OVER(PARTITION BY state ORDER BY population DESC) AS rn
   FROM tbl_city) AS A
WHERE rn = 1
您可以尝试以下代码:

SELECT * FROM (
   SELECT id, state, population,
      ROW_NUMBER() OVER(PARTITION BY state ORDER BY population DESC) AS rn
   FROM tbl_city) AS A
WHERE rn = 1
试试这个

SELECT id,
       state,
       population
FROM   #yourtable A
WHERE  population IN(SELECT Max(population) AS population
                     FROM   #yourtable A1
                     WHERE  A.state = A1.state
                     GROUP  BY state) 
试试这个

SELECT id,
       state,
       population
FROM   #yourtable A
WHERE  population IN(SELECT Max(population) AS population
                     FROM   #yourtable A1
                     WHERE  A.state = A1.state
                     GROUP  BY state) 
所需的sql查询:

SELECT *
FROM(
    SELECT *, ROW_NUMBER() OVER (PARTITION BY state ORDER BY population DESC) AS RowNum
    FROM dbo.tbl_city
    ) s
WHERE s.RowNum = 1
所需的sql查询:

SELECT *
FROM(
    SELECT *, ROW_NUMBER() OVER (PARTITION BY state ORDER BY population DESC) AS RowNum
    FROM dbo.tbl_city
    ) s
WHERE s.RowNum = 1

显示您希望从中获得的输出。已经有了答案:显示您希望从中获得的输出。已经有了答案:如果有两个ID(4和5),比如说,相同状态下的最大填充量,它会做什么?@Zane,对于第一个版本,它将只输出4。对于第二个版本,它将同时输出这两个ID。如果有两个ID(4和5),比如说,同一个州的最大人口,它会怎么做?@Zane,对于第一个版本,它将只输出4。对于第二个版本,它将同时输出这两个。