Postgresql 错误:列必须出现在 GROUP BY 子句中或在聚合函数中使用
Posted
技术标签:
【中文标题】Postgresql 错误:列必须出现在 GROUP BY 子句中或在聚合函数中使用【英文标题】:Postgresql error: column must appear in the GROUP BY clause or be used in an aggregate function 【发布时间】:2020-11-04 01:18:09 【问题描述】:我想从中获取“user1”最近联系人的消息表,现在该表如下所示:
| id | receiver | sender | time |
|----|----------|--------|------------|
| 1 | user1 | host1 | 2020-07-02 |
| 2 | host2 | user1 | 2020-07-03 |
| 3 | user3 | host3 | 2020-07-04 |
我设法通过使用 mysql 得到了预期的结果:
SELECT CASE WHEN receiver = 'user1' THEN sender ELSE receiver END AS id, max(time) AS time
FROM message WHERE receiver = 'user1' OR sender = 'user1'
GROUP BY CASE WHEN receiver = 'user1' THEN sender ELSE receiver END;
但是当我在 postgres 上运行此查询时,我收到错误:Postgresql 错误:列接收器必须出现在 GROUP BY 子句中或用于聚合函数中。有什么办法可以解决这个问题?
【问题讨论】:
您的查询按照 PostgreSQL 编写的方式工作:db-fiddle.com/f/c648pLyq1N4yQTDcBMUfeM/0 是的,但是当我在 node-postgres 模块上使用它时,我得到了那个错误 请更新您的问题并添加您的节点代码。 【参考方案1】:我建议distinct on
:
select distinct on ( case when receiver = 'user1' then sender else receiver end ) m.*
from messages m
where 'user1' in (receiver, sender)
order by (case when receiver = 'user1' then sender else receiver end), time desc;
【讨论】:
以上是关于Postgresql 错误:列必须出现在 GROUP BY 子句中或在聚合函数中使用的主要内容,如果未能解决你的问题,请参考以下文章
必须出现在 postgresql 的 GROUP BY 子句中
Django 与 Postgresql,列必须出现在 GROUP BY 子句中或在聚合函数中使用