Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在字符串分组值中显示零_Mysql_Sql_Group By_Count_Grouping - Fatal编程技术网

Mysql 在字符串分组值中显示零

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 | 但

我正在尝试筛选sql表,如下所示:

| 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完成我的朋友