我想做出这样的事情:对于每个国家来说,确定最大发射船数的年份。如果只有一个国家,它会超过一年 - 选择较小。SQL Server数据库 - 如何查询?
有人可以帮我吗?
这是数据库:
输出必须如下:国,船舶的数量,一年
Japan | 1 | 1913
USA | 3 | 1941
Gt Britain | 6 | 1916
我想做出这样的事情:对于每个国家来说,确定最大发射船数的年份。如果只有一个国家,它会超过一年 - 选择较小。SQL Server数据库 - 如何查询?
有人可以帮我吗?
这是数据库:
输出必须如下:国,船舶的数量,一年
Japan | 1 | 1913
USA | 3 | 1941
Gt Britain | 6 | 1916
select country, launched, cnt
from
(
select country, launched, cnt, ROW_NUMBER() over (partition by country order by cnt desc, launched asc) as rn
from
(
select c.country, s.launched, count(*) as cnt
from @classes c
inner join @ships s on c.class = s.class
group by c.country, s.launched
)sq1
)sq2 where rn = 1
船的数量在代码输出中不正确:Japan | 1 | 1913 USA | 1 | 1941 Gt英国| 1 | 1916年,所有行中的船舶数量是 - 1,但必须是1,3,6您能修理它吗? –
我的不好 - 修复了选择列 –
非常感谢! –
试试这个
;WITH CTE
AS
(
SELECT
C.Country,
S.Launched,
ShipCnt = COUNT(1)
SeqNo = ROW_NUMBER() OVER(PARTITION BY S.Launched ORDER BY COUNT(1) DESC)
FROM Classes C
INNER JOIN Ships S
ON C.Class = S.Class
GROUP BY C.Country,S.Launched
)
SELECT * FROM CTE WHERE SeqNo = 1
您的代码不能正常工作 –
如果您发布数据和ddl而不是图片,这将容易得多。解决此问题的一种方法的基本要点是使用按国家和年份降序分区的ROW_NUMBER。然后得到那些ROW_NUMBER值为1的人。 –