sql - 跨字段选择 MIN 和 MAX 并按用户聚合

标签 sql postgresql aggregate-functions rails-postgresql

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

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/

相关文章:

Java Hibernate 填充 transient 属性

mysql - 使用十个字符单词中的前 3 个和后 3 个字符查询数据

数据库 Postgres - 无法加载数据库

python - 将 Django Web 应用程序数据库连接到 Pythonanywhere 上的 postgresql

postgresql - 如何确定 Postgres 表的 OID?

sql - BigQuery子查询基于所有外部列的返回数字

php - Laravel leftJoin 只加入右表的最后一条记录

MySQL 查询聚合多个条件下的术语

SQL 管理工作室/SQL : Seeing the GroupBy/Sum aggregate functions

sql - 单个查询中的多个 array_agg() 调用