sql - 分组依据为空时的子查询选择

标签 sql postgresql group-by subquery

我有一个我无法弄清楚的问题。

SELECT (
  SELECT COUNT(bar.id)
  FROM bar
  WHERE foo.some_id = bar.some_id
  ) AS num_bar
  FROM foo
  GROUP BY some_id

如果 foo 看起来像这样:

ID|some_id
----------
1 |NULL
2 |apple
3 |orange

酒吧看起来像这样

ID|some_id
----------
1 |NULL
2 |apple
3 |orange
4 |NULL
5 |apple
6 |orange

我希望它返回:

num_bar
-------
2
2
2

但是,NULL 分组上的计数每次都返回 0。

当 group by 为 NULL 时,如何正确处理此 WHERE 子句?

最佳答案

SQL 聚合函数和比较可能会在计算中忽略 NULL 值

您可能想要做的是给它一个值,然后相应地解释空值。因此,在下面的查询中,您要求查询将空值解释为 -1。

SELECT (
 SELECT COUNT(bar.id)
 FROM bar
 WHERE isnull(foo.some_id, -1) = isnull(bar.some_id,-1)
) AS num_bar
FROM foo
GROUP BY isnull(some_id,-1)

关于sql - 分组依据为空时的子查询选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41887581/

相关文章:

mysql - 插入记录时对多个表进行约束检查

sql - 带有 "or"运算符的 DB2 SQL 正则表达式

php - 使用 bitnami wapp 时我们应该在哪里保存 html 和 php 文件?

sql - 如果 PostgreSQL 中不存在数据,则获取值为零

SQL查询帮助: Probably Involves Group By

php - MySQL 查询分组依据和位置

mysql - Sql join 查询并多选择一列

mysql - 使用存储过程从表中获取数据

postgresql - 有效地找到 a < (max(a) for a given b) 的行

mysql - 优化 MySQL GROUP BY/ORDER BY 计算集合交集