Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 分组依据为空时选择子查询_Sql_Postgresql_Group By_Subquery - Fatal编程技术网

Sql 分组依据为空时选择子查询

Sql 分组依据为空时选择子查询,sql,postgresql,group-by,subquery,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 |o

我有一个疑问,我想不通

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值

您可能要做的是给它一个值,然后相应地解释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)

如果我理解正确,您希望将
条形图中的
某些id
空值一起计算

不要在
count
聚合中使用
some\u id
,比如
count(some\u id)
。当某个id为
NULL
时,它将忽略
NULL
值并始终返回零

这样试试

SELECT F.some_id,
       Count(1) AS count_someid
FROM   foo F
       INNER JOIN bar B
               ON F.some_id = B.some_id
                   OR ( F.some_id IS NULL AND B.some_id IS NULL ) -- To join NULL records
GROUP  BY F.some_id 

某些id中出现的
空值
也将单独分组并计数

这是一种与Nagendra Kakarla相同的逻辑更好的方法

SELECT  F.some_id ,COUNT(1) AS count_someid
FROM FOO F
INNER JOIN BAR B ON ISNULL(F.some_id,'#') = ISNULL(B.some_id,'#')
GROUP BY F.some_id
你会得到这样的结果

+---------+--------------+
| some_id | count_someid |
+---------+--------------+
| NULL    |            2 |
| apple   |            2 |
| orange  |            2 |
+---------+--------------+