Mysql:逐级COUNT值(如果级别不存在,则数字为0)

时间:2016-01-18 16:17:11

标签: mysql

我尝试按字段值

进行分组
  

(表)LEVEL_COUNT:

id  level

1   high

2   high

3   hgih

4   low
.

.

.

如果medium中不存在level,但我希望结果如下:

level   count 

high    3 

medium  0 

low     1

我尝试INdistinct,但他们只找到了现有值

有没有办法count不同level包括不存在的值?

2 个答案:

答案 0 :(得分:1)

正如评论中已提到的:DBMS必须知道存在哪些级别(否则它不会知道表level_count中缺少级别'medium')。

因此,请创建一个包含一列levels的表level。添加三行:“高”,“中”,“低”。

level_count(level)上的外键添加到levels(level)。这样可以防止在样本数据中存储类似'hgih'的拼写错误。

然后查询:

select l.level, count(lc.level)
from levels l
left outer join level_count lc on lc.level = l.level
group by l.level;

答案 1 :(得分:0)

我使用PHP与PDO的原始代码

SQL:

SELECT `level` , count(`level`)  FROM `level_count` GROUP BY `level`

然后将reuslut推送到level数组,它将如下所示:

level['high'] = 3, level['medium'] = 0, level['low'] = 1

它的工作,但我认为它并不完美

所以我认为在Outset

中可能有任何SQL语法可以达到这个目的