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
以上是关于Mysql计算带有null的行和行的主要内容,如果未能解决你的问题,请参考以下文章
UICollectionViewFlowLayout 的行和列