gpt4 book ai didi

PostgreSQL 不允许我按顺序对列进行分组

转载 作者:行者123 更新时间:2023-11-29 11:11:08 25 4
gpt4 key购买 nike

在 PostgreSQL 中,我想一次获取每个用户并按日期排序。

这是我的查询:

SELECT id, useridx, isread, message, date
FROM messages
WHERE isread = 1
GROUP BY useridx
ORDER BY date DESC

这是一个示例数据:

------------------------------------------------------
+ id | useridx | isread | messsage | date +
------------------------------------------------------
1 | 1 | 0 | Hello | 2012-01-01
2 | 2 | 1 | Hi | 2012-01-02
3 | 3 | 1 | Test | 2012-01-03
4 | 3 | 0 | My Msg | 2012-01-04
5 | 4 | 1 | sadasd | 2012-01-05
6 | 4 | 1 | sdfsdfd | 2012-01-06
7 | 4 | 0 | sdfsdfsd | 2012-01-07
8 | 5 | 0 | 5345634 | 2012-01-08
9 | 6 | 0 | sdfdfsd | 2012-01-09
10 | 7 | 0 | sdfsdfsf | 2012-01-10
------------------------------------------------------

现在,我想要做的是通过 useridx 将它们分组并按日期排序来获取此表。

预期结果:

------------------------------------------------------
+ id | useridx | isread | messsage | date +
------------------------------------------------------
6 | 4 | 1 | sdfsdfd | 2012-01-06
3 | 3 | 1 | Test | 2012-01-03
2 | 2 | 1 | Hi | 2012-01-02
------------------------------------------------------

实际结果

ERROR:  column "messages.date" must appear in the GROUP BY clause or be used in an aggregate function

我也不想对日期进行分组。我只想用 useridx 分组并按日期 DESC 对它们进行排序。

感谢任何帮助/想法!

注意:我也试过 Distinct。不符合我的需求或我做错了。

我在 DISTINCT ONrank() 方法之间非常困惑和卡住

结论:对于在这里遇到同样问题的人,可以阅读此作为答案。 @kgrittn 和@mu is too short 的答案都是正确的。我将继续在我的项目中同时使用答案和模式,我猜我会及时了解哪个是最好的。因此,选择其中之一并继续您的工作。你会没事的。

上次更新:有时,Distinct On 会从结果中排除一些 ID。可以说我有一个 id 列,我有 6 行是相同的。所以,distinct on exlude it from the result BUT rank() 只是结果。 所以,使用 rank()!

最佳答案

与 MySQL 不同,PostgreSQL 不会显示未在聚合查询中聚合的列的随机数据。

解决方案在错误信息中

ERROR:  column "messages.date" must appear in the GROUP BY clause or be used in an aggregate function

这意味着您必须 GROUP BY "messages.date"列或在选择此列时使用聚合函数,如 MIN() 或 MAX()

例子:

SELECT MIN(id), useridx, isread, message, MAX(date)
FROM messages WHERE isread = 1
GROUP BY useridx, isread, message
ORDER BY MAX(date) DESC

关于PostgreSQL 不允许我按顺序对列进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10342247/

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