gpt4 book ai didi

sql - 除了group by之外,如何选择*?

转载 作者:行者123 更新时间:2023-12-02 02:40:52 25 4
gpt4 key购买 nike

考虑一个包含 a-z 字段的 PostgreSQL 表

a, b, c ... z
-------------
5, 6, 2 ... 9
5, 6, 3 ... 1

我想对字段 a,b 进行分组,并仅保留 b 最大的记录。

SELECT a, max(b) as b, c, d, e ... z
FROM table
GROUP BY a, b

这工作得很好,但是必须在 SELECT 中输入所有值很烦人。我宁愿做类似的事情

SELECT max(b) as b, * 
FROM TABLE

但是这样做会出错

[42803] ERROR: column "table.id" must appear in the GROUP BY clause orbe used in an aggregate function.

知道如何避免在执行 groupby 操作时在冗长的表中键入所有列名吗?

最佳答案

您可以使用rank():

select t.*
from (select t.*, rank() over (partition by a order by b desc) as seqnum
from t
) t
where seqnum = 1;

实际上,在 Postgres 中,最快的方法通常是 distinct on:

select t.*
from t
order by a, b desc;

(a, b desc) 上建立索引,这应该是最快的方法。

关于sql - 除了group by之外,如何选择*?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63649783/

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