Sql server 如何编写sql查询以在使用聚合函数的查询中获取主键
我的表结构如下所示: 我想要州内人口最多的城市的id(主键) 如果在特定状态下的最大人口数有一个平局,则应选择这些行中的任何一个id 试试这个: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
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。对于第二个版本,它将同时输出这两个。