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

时间:2018-09-24 08:40:09

标签: 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;

这将创建

Nickname | numPosts | numComments

bob              1             2
sally            2             1
tommy         NULL          NULL
 etc.......

我不希望显示tommy

3 个答案:

答案 0 :(得分:5)

只需在查询中添加<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <table cellspacing="0" cellpadding="0" border="0"> <tr> <td>1</td> <td>2</td> <td>3</td> <td>4</td> <td>5</td> </tr> <tr> <td>1</td> <td>2</td> <td>3</td> <td>4</td> <td>5</td> </tr> <tr> <td>1</td> <td>2</td> <td>3</td> <td>4</td> <td>5</td> </tr> <tr> <td>1</td> <td>2</td> <td>3</td> <td>4</td> <td>5</td> </tr> <tr> <td>1</td> <td>2</td> <td>3</td> <td>4</td> <td>5</td> </tr> </table> <input id="btMerge" type="button" value="Merge cells" />,即

WHERE pc.nickname IS NOT NULL OR pa.nickname IS NOT NULL

这将排除在postAuthors和postComments中都没有值的所有用户。

答案 1 :(得分:1)

使用where子句并设置非空条件

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

答案 2 :(得分:0)

在这种情况下,您可以在页面显示时对其进行控制。

if(object->property_name==Null && object->property_name==Null ){
 continue;
}
相关问题