Postgresql获取具有多列的每个组的最大值[重复]
Posted
技术标签:
【中文标题】Postgresql获取具有多列的每个组的最大值[重复]【英文标题】:Postgresql Get max value of each group with multiple columns [duplicate] 【发布时间】:2019-08-14 20:17:35 【问题描述】:我有下表
CREATE table test
(
random_number INT,
band VARCHAR(255),
member_name VARCHAR(255)
);
INSERT INTO test VALUES(2300,'Metallica', 'Kirk');
INSERT INTO test VALUES(2000,'Metallica', 'Lars');
INSERT INTO test VALUES(2500,'Metallica', 'James');
INSERT INTO test VALUES(2800,'Metallica', 'Roberto');
INSERT INTO test VALUES(100,'SkidRow', 'Sebastian');
INSERT INTO test VALUES(140,'SkidRow', 'Rachel');
INSERT INTO test VALUES(110,'SkidRow', 'Scott');
INSERT INTO test VALUES(150,'SkidRow', 'Dave');
INSERT INTO test VALUES(100,'SkidRow', 'Rob');
INSERT INTO test VALUES(500,'Motorhead', 'Lemmy');
INSERT INTO test VALUES(100,'Motorhead', 'Mikkey');
INSERT INTO test VALUES(200,'Motorhead', 'Phil');
我怎样才能获得每个乐队中最大的random_number
并返回如下内容:
random_number | band | member_name
-----------------------------------------
2800 | Metallica | Roberto
150 | SkidRow | Dave
500 | Motorhead | Lemmy
【问题讨论】:
查看窗口函数:***.com/questions/3800551/… 【参考方案1】:使用distinct on
:
select distinct on (band) t.*
from test t
order by band, random_number desc;
Here 是一个 dbfiddle。
distinct on
是一个非常方便的 Postgres 扩展。对于大型数据集的性能,您需要(band, random_number desc)
上的索引。
【讨论】:
【参考方案2】:通过分组和加入表找到最大的random_number
:
select t.*
from test t inner join (
select band, max(random_number) maxnum from test group by band
) g
on g.band = t.band and g.maxnum = t.random_number
见demo
【讨论】:
【参考方案3】:使用MAX()
SELECT max(random_number), band FROM test GROUP BY band
见:https://rextester.com/BEZD44968
结果是:
no max band
1 2800 Metallica
2 500 Motorhead
3 150 SkidRow
【讨论】:
感谢您的回答。我想在结果中看到member_name
。
啊,那就用distinct吧。请参阅@Gordon 的回答。以上是关于Postgresql获取具有多列的每个组的最大值[重复]的主要内容,如果未能解决你的问题,请参考以下文章