计数功能未通过MySQL查询返回0计数组中的空值

时间:2018-10-09 13:18:48

标签: mysql sql

我的查询

SELECT 
    rc.id as id,
    rc.name AS categoryName,
    count(r.category) AS raveCount
FROM
    rave r
        LEFT JOIN
    rave_category rc ON (r.category = rc.id)
WHERE
    r.sent_by = 1
GROUP BY rc.id;

我在这里同时附上了两个表格结构

rave table

rave category table

但是答案不返回其他类别名称的第0个值

enter image description here

3 个答案:

答案 0 :(得分:1)

如果我正确地设定了目标,则只需将左右表切换为相反的表即可。

SELECT 
    rc.id as id,
    rc.name AS categoryName,
    count(r.category) AS raveCount
FROM rave_category rc
LEFT JOIN rave r
ON r.category = rc.id
  AND r.sent_by = 1
GROUP BY rc.id;

答案 1 :(得分:0)

r.category在左表中。在null之后,它将没有Left Join值(由于记录不匹配)。您需要对rc.id进行计数,以便将其计数为零(在最右边的表中没有匹配的条目)。

此外,您还应该提及Group by中的所有select列(聚合表达式除外)。

此外,您需要从最左侧的表中选择r.category。而且,我已将别名更改为cat_id,以使其无歧义。

尝试:

SELECT 
    r.category AS cat_id,
    rc.name AS categoryName,
    count(rc.id) AS raveCount
FROM
    rave r
        LEFT JOIN
    rave_category rc ON (r.category = rc.id)
WHERE
    r.sent_by = 1
GROUP BY cat_id, 
         categoryName  

答案 2 :(得分:0)

使用ifnull函数(如果为null)将返回0

SELECT 
    rc.id as id,
    rc.name AS categoryName,
    IFNULL(count(r.category),0) AS raveCount
FROM
    rave r
        LEFT JOIN
    rave_category rc ON (r.category = rc.id)
WHERE
    r.sent_by = 1
GROUP BY rc.id,rc.name;