我在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
因此,基本上我会为差异字段提供每个用户_id的最小值和最大,其中null应优先于实际最大值关于如何通过SQL实现这一目标的任何想法?
您可以使用COUT(*)vs. 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)