我的查询返回null,我想要一个0.我认为它与子查询中的coalesce有关,但是我无法改变任何东西。有问题的查询:
SELECT c.post_id, c.post_name, c.post_content, c.post_datetime, c.user_name,
p.like_count,
p.dislike_count,
s.comment_count
FROM posts c
LEFT JOIN (
select post_id,
sum(like_count) like_count,
sum(dislike_count) dislike_count
from post_likes
group by post_id
) p ON c.post_id = p.post_id
LEFT JOIN (
select post_id, COALESCE(sum(comment_count),0) comment_count
from comments
group by post_id
) s ON c.post_id = s.post_id
WHERE c.user_name = 'test'
它正在返回正确的金额,但COALESCE似乎没有任何影响。
答案 0 :(得分:3)
你的怀疑是正确的。将COALESCE
向上移动到外部查询,您应该很好。它不起作用的原因是COALESCE
仅适用于s
派生表表达式中的行。如果s
中左侧外部联接中的c
与s
没有匹配的行,则s
(包括合并列)的任何内容都不会从#lang racket
返回。您将获得所有列的NULL。