2017-10-06 35 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)並運行它。

注:以上是通用的;確切的代碼可能因數據庫而異。

相關問題