我有一个大型SQL数据库,如下所示:
对于单个列,我会使用以下命令计算频率:
SELECT col1,count(1) FROM tbl GROUP BY col1;
给出如下所示的内容:
但理想情况下,我想要一个在所有指定列上运行上述命令的命令,在Value列上匹配,并用0填充空白。这在任何SQL实现中是否可行?我目前正在使用SQLite,但我们处于相当开放的关系中。
这是我想要的'输出:
答案 0 :(得分:1)
这是使用带有union all
的子查询的一个选项:
select col, count(1)
from (
select col1 col from yourtable
union all
select col2 from yourtable
union all
select col3 from yourtable
) t
group by col
根据您想要的结果,也许这就是您正在寻找的,而不是使用带有条件聚合的outer join
:
select col,
sum(case when t1.col1 = col then 1 else 0 end ) as Col1Count,
sum(case when t1.col2 = col then 1 else 0 end) as Col2Count,
sum(case when t1.col3 = col then 1 else 0 end) as Col3Count
from (
select col1 col from yourtable
union
select col2 from yourtable
union
select col3 from yourtable
) t
left join yourtable t1 on t.col in (t1.col1, t1.col2, t1.col3)
group by col