我有以下在 Postgresql 数据库上运行的查询:
SELECT NULL AS fromdate,
l.eventlevel,
SUM(CASE
WHEN e.id IS NULL THEN 0
ELSE 1
END) AS COUNT
FROM event e
RIGHT JOIN
(SELECT generate_series(0, 3) AS eventlevel) l ON e.event_level = l.eventlevel
WHERE e.project_id = :projectId
GROUP BY l.eventlevel
ORDER BY l.eventlevel DESC
使用(修剪后的)事件表:
TABLE public.event
id uuid NOT NULL,
event_level integer NOT NULL
这是存储桶查询的变体,但包含所有数据,因此 fromdate 为 NULL。
我正在尝试从表 event
中获取计数并按 event_level 进行计数。但我还希望当该特定 event_level 没有任何事件时返回数字 0
。但当前的右连接并没有完成这项工作。我究竟做错了什么?
我还尝试添加 OR e.project_id IS null
认为它可能会过滤掉 0 计数。或者这是否可以与 CROSS JOIN 一起使用,如果可以的话如何?
当前结果:
+----------+------------+-------+
| fromdate | eventlevel | count |
+----------+------------+-------+
| null | 3 | 1 |
+----------+------------+-------+
期望的结果:
+----------+------------+-------+
| fromdate | eventlevel | count |
+----------+------------+-------+
| null | 3 | 1 |
| null | 2 | 0 |
| null | 1 | 0 |
| null | 0 | 0 |
+----------+------------+-------+
最佳答案
您必须将 e.project_id
条件从 WHERE
子句移至 ON
子句才能获得真正的 RIGHT JOIN
结果:
...
END) AS COUNT
FROM event e
RIGHT JOIN
(SELECT generate_series(0, 3) AS eventlevel) l ON e.event_level = l.eventlevel
AND e.project_id = :projectId
...
关于sql - 如何右连接这些系列,以便此查询将返回 Postgresql SQL 中 count = 0 的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62000509/