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
用你正在使用的數據庫標記你的問題。 –