SQL:查询两个单独的表并返回计数值,然后按两个返回值进行分组

Mal*_*eir 1 mysql sql join group-by

我正在努力让这个查询正确.我有返回的表来显示昵称和两个相关的值.表是:用户(昵称,名称等)postsAuth(昵称,postID等)postComm(昵称,comID等)

我试图让它包括用户如果numPosts和numComments中返回的值都为NULL(例如,如果他们没有评论或创建帖子).我不确定如何让这个工作.代码如下

SELECT u.nickname, pa.numPosts, pc.numComments
FROM Users u
LEFT JOIN
(SELECT pa.nickname, COUNT(pa.nickname) AS numPosts
    FROM postAuthors pa
    GROUP BY pa.nickname
)pa
ON u.nickname = pa.nickname LEFT JOIN 
(SELECT pc.nickname, COUNT(pc.nickname) AS numComments
    FROM postComments pc
    GROUP BY pc.nickname
)pc
ON u.nickname = pc.nickname;
Run Code Online (Sandbox Code Playgroud)

这创造了

Nickname | numPosts | numComments

bob              1             2
sally            2             1
tommy         NULL          NULL
 etc.......
Run Code Online (Sandbox Code Playgroud)

我不想tommy被展示.

Nic*_*ick 5

只需添加WHERE pc.nickname IS NOT NULL OR pa.nickname IS NOT NULL到查询即

SELECT u.nickname, pa.numPosts, pc.numComments
FROM Users u
LEFT JOIN
(SELECT pa.nickname, COUNT(pa.nickname) AS numPosts
    FROM postAuthors pa
    GROUP BY pa.nickname
)pa
ON u.nickname = pa.nickname LEFT JOIN 
(SELECT pc.nickname, COUNT(pc.nickname) AS numComments
    FROM postComments pc
    GROUP BY pc.nickname
)pc
ON u.nickname = pc.nickname
WHERE pc.nickname IS NOT NULL OR pa.nickname IS NOT NULL
Run Code Online (Sandbox Code Playgroud)

这将排除在postAuthors和postComments中都没有值的任何用户.