gpt4 book ai didi

sql - max 函数,每组有多个结果

转载 作者:行者123 更新时间:2023-12-04 08:33:31 24 4
gpt4 key购买 nike

我正在寻找有关 postgresql 查询的帮助。
示例输入数据如下:

pk  name
=========================
1 | notebook cz-2001
2 | notebook cz-2002
3 | notebook cz-2003
4 | notebook cz-2003
5 | notebook cz-2003
6 | notebook cz-2004
7 | notebook cz-2004
8 | notebook cz-2004
9 | notebook cz-2004
10 | notebook cz-2005
11 | notebook cz-2006
12 | notebook cz-2007
13 | notebook cz-2008
14 | notebook cz-2009
某些行在名称列中具有相同的值(笔记本 cz-2003、笔记本 cz-2004)
我可以通过此查询获得分组名称的一个最大 pk 值:
select * from test_group where pk in
(
select max(pk) from test_group group by name order by name
)
结果:
pk  name
=========================
1 | notebook cz-2001
2 | notebook cz-2002
5 | notebook cz-2003
9 | notebook cz-2004
10 | notebook cz-2005
11 | notebook cz-2006
12 | notebook cz-2007
13 | notebook cz-2008
14 | notebook cz-2009
但我不知道,这就是我的问题,例如如何获得分组名称的两个(三个、四个......)最高 pk 值。
例如,两个最高 pk 的预期结果:
pk  name
=========================
1 | notebook cz-2001
2 | notebook cz-2002
4 | notebook cz-2003
5 | notebook cz-2003
8 | notebook cz-2004
9 | notebook cz-2004
10 | notebook cz-2005
11 | notebook cz-2006
12 | notebook cz-2007
13 | notebook cz-2008
14 | notebook cz-2009
你能给我一些如何实现的提示吗?
谢谢
J.P

最佳答案

您可以使用 row_number() window function为了那个原因:
demo:db<>fiddle

SELECT pk, name
FROM
(
SELECT *, ROW_NUMBER() OVER (PARTITION BY name ORDER BY pk DESC)
FROM my_table
) s
WHERE row_number <= 2 -- or any other value
row_number()窗口函数向某个有序组添加行号。您的群组是 name列和顺序是 pk (降序是因为您希望首先计算最高数字)。
WHERE您可以过滤前 n 条记录(编号为 1、2、...)或您喜欢的任何其他元素。

关于sql - max 函数,每组有多个结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64914563/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com