sql - 与 group by 合并
问题描述
我有这两张表:
users (这有一个 updated_at 列)和 user_updates (这有一个外键 user_id 给用户和一个 created_at 列)
我想为用户找到最新的用户更新,所以我有这个:
SELECT user_id, MAX(user_updates.created_at) as last_update
FROM user_updates
WHERE user_id IN (<user_id>)
GROUP BY 1
但是,有时 user_update 不会有created_at
,所以我需要使用users.updated_at
. 我试过这个:
SELECT user_id, COALESCE(MAX(user_updates.created_at), users.updated_at) as last_update
FROM user_updates
INNER JOIN users ON users.id = user_updates.user_id
WHERE user_id IN (<user_id>)
GROUP BY 1
但是 Postgres 抱怨说:“列“users.updated_at”必须出现在 GROUP BY 子句中或在聚合函数中使用”
我怎样才能解决这个问题?
解决方案
通过COALESCE
在MAX
函数内部使用:
SELECT user_id,
MAX(COALESCE(user_updates.created_at,users.updated_at)) as last_update
FROM user_updates
INNER JOIN users
ON users.id = user_updates.user_id
WHERE user_id IN (<user_id>)
GROUP BY user_id
;
推荐阅读
- python - 如何在 django 的管理模板中调用自定义方法
- bootstrap-4 - 具有可变列长度的boostrap div
- javascript - 以固定步长移动元素
- adfs - 在 Windows 窗体上显示用户名
- soap - 如何从 URL 触发 BluePrism 的可见 Web 服务?
- amazon-web-services - 无法使用 Kong Ingress Controller 后面的 keycloak 访问管理控制台页面
- c++ - 我看不到 boost::interprocess 通过 shell 命令 ipcs 创建的共享内存
- json - 如何使用此 JSON 文件中的键创建 Pandas DataFrame?
- java - 如何修复 Spring3.2 中的“无法构建架构”错误?
- c# - 使用字典或单独绑定模型中的每个变量是否更好(描述中更详细)