我在db
中保存了以下原始数据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实现这一点的任何想法?
答案 0 :(得分:1)
您可以使用COUT(*)与COUNT(列)检查该列中是否存在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)