我在数据库中保存了以下原始数据
id min_price, max_price, min_x, max_x, user_id
-------------------------------------------
1 50 200 5 null 1
2 0 100 0 3 1
3 150 300 0 null 1
4 20 200 2 5 2
5 50 200 0 5 2
6 150 200 1 3 2
我想用以下数据创建一个 sql 查询(postgres):
min_price, max_price, min_x, max_x, user_id
0 300 0 null 1
20 200 0 5 2
所以基本上我会为差异字段的每个 user_id 获取最小值和最大值,其中 null 应优先于实际最大值, 关于如何通过 sql 实现此目的的任何想法?
最佳答案
您可以使用 COUT(*) 与 COUNT(column) 检查该列中是否存在 NULL:
SELECT
user_id,
CASE WHEN COUNT(*) <> COUNT(max_x) THEN NULL ELSE MAX(max_x) END AS max_x
FROM vt
GROUP BY 1
暴力解决方案是:
NULLIF(MAX(COALESCE(max_x, 9999999999)), 9999999999)
关于sql - 跨字段选择 MIN 和 MAX 并按用户聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21451233/