Mysql 在字符串分组值中显示零
我正在尝试筛选sql表,如下所示:Mysql 在字符串分组值中显示零,mysql,sql,group-by,count,grouping,Mysql,Sql,Group By,Count,Grouping,我正在尝试筛选sql表,如下所示: | status | name | description | |------------|--------|-------------------| | finished | task 1 | finished task 1 | | finished | task 2 | finished task 2 | | in_process | task 3 | in process task 1 | 但
| status | name | description |
|------------|--------|-------------------|
| finished | task 1 | finished task 1 |
| finished | task 2 | finished task 2 |
| in_process | task 3 | in process task 1 |
但是,“状态”列可以有3个不同的值:finished
、in_process
和new
问题是:有些值可能没有记录,那么我如何才能拥有一个包含所有可能状态值的分组查询呢
这是我当前的查询:
选择状态、计数(状态)
来自任务
按身份分组
一个选项是列出所有可能的状态值,然后将表与左连接起来
例如:
select s.status, count(t.status) no_status
from (
select 'finished' status
union all select 'in_process'
union all select 'new'
) s
left join mytable t on t.status = s.status
group by s.status
有些数据库有更简洁的方式来声明派生的状态表,如values()
table构造函数:
select s.status, count(t.status) no_status
from (values ('finished'), ('in_process'), ('new')) s(status)
left join mytable t on t.status = s.status
group by s.status
您也可以使用select distinct
直接从表中获取值(尽管这效率较低,因为这需要对原始表进行额外扫描和重复数据消除):
在理想情况下,您将有一个参考表来存储所有可能的状态值,例如status(status)
:
一个选项是列出所有可能的状态值,然后将表与左连接起来
例如:
select s.status, count(t.status) no_status
from (
select 'finished' status
union all select 'in_process'
union all select 'new'
) s
left join mytable t on t.status = s.status
group by s.status
有些数据库有更简洁的方式来声明派生的状态表,如values()
table构造函数:
select s.status, count(t.status) no_status
from (values ('finished'), ('in_process'), ('new')) s(status)
left join mytable t on t.status = s.status
group by s.status
您也可以使用select distinct
直接从表中获取值(尽管这效率较低,因为这需要对原始表进行额外扫描和重复数据消除):
在理想情况下,您将有一个参考表来存储所有可能的状态值,例如status(status)
:
请用您正在使用的数据库标记您的问题:mysql、oracle、sql server…?@GMB完成我的朋友请用您正在使用的数据库标记您的问题:mysql、oracle、sql server…?@GMB完成我的朋友