2017-10-06 53 views
0

我有一个包含700列的表。我正在尝试为每列和他们的计数获取不同值的列表。我使用下面的查询得到的结果为1列显示计数和表中所有列的不同值

Select distinct col1, count(*) from MyTable group by 1. 

结果:

col1 count(*) 
a  10 
b  20 
c  40 

我怎样才能以最优化的方式使用单个查询所有列的结果呢?

+0

700列?这是一张wiiiide表格,我们今天已经分享了我们每天的WTF问题。动态sql循环 – Twelfth

+0

用你正在使用的数据库标记你的问题。 –

回答

1

基本的查询是:

select col001, count(*) from MyTable group by col001 union all 
select col002, count(*) from MyTable group by col002 union all 
. . . 
select col700, count(*) from MyTable group by col700 ; 

不愉快的,但基本上是你需要运行查询。 SQL并没有真正做多个独立的聚合,而是单独做它们(即使用grouping sets,根据我的经验)。

您可以构造查询。一种方法是运行像这样:

select replace(replace('select [col], count(*) as cnt from [tab] group by [col] union all ', 
         '[tab]', table_name 
        ), '[col]', column_name 
       ) 
from information_schema.columns 
where table_name = 'mytable' and table_schema = ??; 

然后,您可以复制生成的SQL(去掉最终union all)并运行它。

注:以上是通用的;确切的代码可能因数据库而异。

相关问题