通过mysql查询计数函数不返回0计数组中的空值

问题描述 投票:2回答:3

我的查询是这样的

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

mysql sql
3个回答
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;

0
投票

在null的情况下使用ifnull函数它将返回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;

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  
© www.soinside.com 2019 - 2024. All rights reserved.