我有一个名为case的表,如下所示
0.5*match_parent
我想要一个如下所示的输出:
os device event_time
Android Mobile <Tstamp>
Android Tablet <Tstamp>
Windows PC <Tstamp>
Linux PC <Tstamp>
原始表格不包含任何带有(Android,PC),(Windows,Mobile)等组合的行,但我寻求输出使这些行的计数为零。通过查询的正常组不会给我那些可能因为原始表根本没有这些组合。
os device events_count
Android Mobile 10
Android Tablet 22
Android PC 0
Windows Mobile 0
Windows Tablet 0
Windows PC 40
Linux Mobile 0
Linux Tablet 0
Linux PC 21
答案 0 :(得分:2)
首先选择所有OS /设备组合,然后再次外连接您的表:
select o.os, d.device, count(e.events_count)
from (select distinct os from events) o
cross join (select distinct device from events) d
left join events e on e.os = o.os and e.device = d.device
group by o.os, d.device
order by o.os, d.device;
(对于此类数据,您通常会有一个操作系统表和一个设备表。您可以交叉连接这些数据,然后外部加入您的事件表。)
答案 1 :(得分:1)
我会使用cross join
select t.os, t.device, count(c.os)
from
(
select os, device
from
(
select distinct os from cases
) t1
cross join
(
select distinct device from cases
) t2
) t
left join cases c on t.os = c.os and
t.device = c.device
group by t.os, t.device