Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.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 计数中没有零值,按2个顺序排列_Sql_Postgresql_Cross Join - Fatal编程技术网

Sql 计数中没有零值,按2个顺序排列

Sql 计数中没有零值,按2个顺序排列,sql,postgresql,cross-join,Sql,Postgresql,Cross Join,我有三张桌子: +---------+ +----------+ +----------+ | kkw | | block | | status | +---------+ +----------+ +----------+ | kkw_id | | block_id | |status_id | | land_id | | kkw_id | | .... | | ... | | statu

我有三张桌子:

+---------+    +----------+    +----------+
|  kkw    |    |  block   |    |  status  |
+---------+    +----------+    +----------+
| kkw_id  |    | block_id |    |status_id |
| land_id |    | kkw_id   |    | ....     |
| ...     |    | status_id|    | ....     |
+---------+    +----------+    +----------+
我想显示每个国家(land_id)和状态的块数,如果一个国家没有对应于状态的块,则为零。我尝试此请求,但未显示零值:

SELECT s.status_id, k.land_id, COUNT(b.block_id)
FROM kkw_status AS s
LEFT JOIN block AS b ON s.status_id = b.status_id
LEFT JOIN kkw AS k ON b.kkw_id=k.kkw_id
GROUP BY s.status_id, k.land_id
ORDER BY k.land_id, s.status_id;
结果:

status_id   land_id count
    1          1      2
    4          1      3  ....
但我想:

status_id   land_id count
    1          1      2
    2          1      0
    3          1      0
    4          1      3  .....

有什么想法吗?谢谢

您正在按
k.land\u id
进行分组。因此,当某些内容不匹配时,该列的值为
NULL
。因此,零值只会显示在这样的行上

如果需要所有
状态id
s和
land\u id
s,则使用
交叉连接创建所有这些属性的列表,然后计算与每个组匹配的数量。我认为这就是查询的样子:

SELECT s.status_id, k.land_id, COUNT(b.block_id)
FROM kkw_status s CROSS JOIN
     kkw k LEFT JOIN
     block b
     ON b.status_id = s.status_id AND b.kkw_id = k.kkw_id
GROUP BY s.status_id, k.land_id
ORDER BY k.land_id, s.status_id;

最有可能的情况是kkw_状态表中缺少值,因为在查询中没有进行筛选。就是这样!谢谢。