Mysql计算带有null的行和行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mysql计算带有null的行和行相关的知识,希望对你有一定的参考价值。

Hy Guys,我有一张这样的桌子:

+----+------+
| id | grade| 
+----+------+
|  1 |    1 |
|  2 |    1 |
|  3 |    2 |
|  4 | NULL |
|  5 | NULL |
|  6 | NULL |
+----+------+

哪里

1不好

2好

3非常好

我试图得到这样的结果:

+--------------+------+
| grade        | count| 
+--------------+------+
| "Bad"        |    2 |
| "Good"       |    1 |
| "Very Good"  |    0 |
| "Not Ranked" |    3 |
+--------------+------+

我正在尝试,但没有成功

答案

您可以使用CASE更改grade的值ibno您想要的字符串值,

SELECT  CASE WHEN grade = 1 THEN 'Bad'
            WHEN grade = 2 THEN 'Good'
            WHEN grade = 3 THEN 'Very Good'
            ELSE 'Not Ranked'
        END as grade,
        COUNT(IFNULL(grade, 0)) as `count`
FROM    TableName
GROUP   BY CASE WHEN grade = 1 THEN 'Bad'
            WHEN grade = 2 THEN 'Good'
            WHEN grade = 3 THEN 'Very Good'
            ELSE 'Not Ranked'
        END

由于您希望显示所有值,因此需要创建一个子查询,该子查询返回所有值并使用LEFT JOIN连接到您的表。

SELECT  a.grade,
        COUNT(b.id)
FROM    
        (
            SELECT 1 id, 'Bad' grade UNION ALL
            SELECT 2 id, 'Good' grade UNION ALL
            SELECT 3 id, 'Very Good' grade UNION ALL
            SELECT 999 id, 'Not Ranked' grade 
        ) a
        LEFT JOIN TableName b ON a.id = IFNULL(b.grade, 999)
GROUP   BY a.grade

这是一个Demo

另一答案

如果您可以使用这些数字,并在以后将它们与字符串匹配,那么这可能是一个解决方案:

SELECT grade, count(*) as id FROM tbl GROUP BY grade

source

以上是关于Mysql计算带有null的行和行的主要内容,如果未能解决你的问题,请参考以下文章

排序,分组,并获取特定列值的行和行+ 1?

检查 NSIndexPath 的行和节的开关

UICollectionViewFlowLayout 的行和列

如何访问选择查询的行和列[关闭]

使用 TableCellRender 设置 JTable 列和行的颜色

在 Power BI 中显示相同值的所有行和行总数