在GROUP BY中包含空组(MYSQL QUERY)

时间:2018-04-02 17:26:23

标签: mysql sql

我想知道我是否可以在我的选择结果中包含空组。

我正在尝试使用此查询:

SELECT
lvl.lvl_name as Level,
slvl.sublvl_name as SubLevel,
sta.stat_name as Status,
count(thg.Id_thing) as Thing_Total
from 
tb_things as thg
LEFT JOIN tb_level lvl ON thg.id_lvl=lvl .id_lvl
LEFT JOIN tb_sublevel slvl ON thg.id_slvl=slvl.id_slvl
LEFT JOIN tb_status sta ON thg.id_stat= sta.id_stat
GROUP BY Level, SubLevel, Status

我得到了这个结果:

LEVEL   SubLevel    Status      Thing_Total
FIRST   FIRST       WAITING     10
FIRST   SECOND      WAITING     5
FIRST   SECOND      COMPLETE    10
SECOND  FIRST       COMPLETE    15

我希望通过计算count(thg.Id_thing)来包含向我显示具有空数据的组(作为0)的行,如下所示:

Level   SubLevel    Status      Thing_Total
FIRST   FIRST       WAITING     10
FIRST   FIRST       COMPLETE    0
FIRST   SECOND      WAITING     5
FIRST   SECOND      COMPLETE    10
SECOND  FIRST       WAITING     0
SECOND  FIRST       COMPLETE    15
SECOND  SECOND      WAITING     0
SECOND  SECOND      COMPLETE    0

tb_things:

  

id_lvl,id_slvl和id_stat永远不会为null,因为这个表是   由一个脚本填充。

Id_thing thing_name id_lvl id_slvl id_stat
1        Name1      1      1       1   
2        Name2      1      1       2 
3        Name3      2      1       1 
.
.

tb_level:

id_lvl lvl_name
1      FIRST
2      SECOND

tb_sublevel

id_slvl sublvl_name 
1       FIRST
2       SECOND

tb_status

id_stat stat_name 
1       WAITING
2       COMPLETE

2 个答案:

答案 0 :(得分:1)

由于您的分组字段似乎彼此之间没有任何关系,除了通过"事物"它们与之相关,你需要综合所有可能的分组;然后你可以离开加入"事物"那个超集。像这样:

SELECT sum(EXTRACT(epoch from (end_time - start_time) / 3600)) as hours_used FROM table

然而,如果有任何"事情"没有一些分组引用(比如设置了id_lvl和id_slvl的东西,但是id_stat为null),结果中将省略这些内容。

答案 1 :(得分:0)

使用cross join定义行。然后使用left joingroup by来获取计数:

select l.lvl_name as Level, sl.sublvl_name as SubLevel, s.stat_name as Status,
      count(t.Id_thing) as Thing_Total
from tb_level l cross join
     tb_sublevel sl cross join
     tb_status s left join
     tb_things t
     on t.id_lvl = l.id_lvl and t.id_slvl = s.id_slvl and t.id_stat = s.id_stat
group by Level, SubLevel, Status