计算每列值的频率,显示填充了空白的所有列的结果

时间:2015-04-28 15:17:52

标签: sql sqlite postgresql

我有一个大型SQL数据库,如下所示:database layout

对于单个列,我会使用以下命令计算频率:

SELECT col1,count(1) FROM tbl GROUP BY col1;

给出如下所示的内容:output for a single column

但理想情况下,我想要一个在所有指定列上运行上述命令的命令,在Value列上匹配,并用0填充空白。这在任何SQL实现中是否可行?我目前正在使用SQLite,但我们处于相当开放的关系中。

这是我想要的'输出: enter image description here

1 个答案:

答案 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