在跨字段中选择最小和最大值,然后按用户汇总



我在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)

相关内容

最新更新