我想知道我是否可以在我的选择结果中包含空组。
我正在尝试使用此查询:
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
答案 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 join
和group 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