【问题标题】:SELECT MIN and MAX across fields and aggregate by user跨字段选择最小值和最大值并按用户聚合
【发布时间】:2014-02-22 10:41:36
【问题描述】:

我在数据库中保存了以下原始数据

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 实现这一点的任何想法?

【问题讨论】:

  • 1 + 2 + 3 + NULLNULL 总是让我很恼火,但是包含相同值的一组行中的 sum()6

标签: sql postgresql aggregate-functions rails-postgresql


【解决方案1】:

您可以使用 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)

【讨论】:

    猜你喜欢
    • 2015-09-25
    • 1970-01-01
    • 2020-08-06
    • 2017-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-09
    • 1970-01-01
    相关资源
    最近更新 更多