0
我有一个包含700列的表。我正在尝试为每列和他们的计数获取不同值的列表。我使用下面的查询得到的结果为1列显示计数和表中所有列的不同值
Select distinct col1, count(*) from MyTable group by 1.
结果:
col1 count(*)
a 10
b 20
c 40
我怎样才能以最优化的方式使用单个查询所有列的结果呢?
我有一个包含700列的表。我正在尝试为每列和他们的计数获取不同值的列表。我使用下面的查询得到的结果为1列显示计数和表中所有列的不同值
Select distinct col1, count(*) from MyTable group by 1.
结果:
col1 count(*)
a 10
b 20
c 40
我怎样才能以最优化的方式使用单个查询所有列的结果呢?
基本的查询是:
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
)并运行它。
注:以上是通用的;确切的代码可能因数据库而异。
700列?这是一张wiiiide表格,我们今天已经分享了我们每天的WTF问题。动态sql循环 – Twelfth
用你正在使用的数据库标记你的问题。 –