我有一個看起來像這樣的大型SQL數據庫:計數頻率,顯示結果爲所有列用空格填充
對於單個列,我會算頻率命令:
SELECT col1,count(1) FROM tbl GROUP BY col1;
給的東西,看起來像這樣:
但理想情況下,我希望跑上述在所有指定的列,在值列匹配,並填補了空白出0的命令。這可能在任何SQL實現?我目前正在使用SQLite,但我們處於一個相當開放的關係。
這是我的 '所需的' 輸出:
我有一個看起來像這樣的大型SQL數據庫:計數頻率,顯示結果爲所有列用空格填充
對於單個列,我會算頻率命令:
SELECT col1,count(1) FROM tbl GROUP BY col1;
給的東西,看起來像這樣:
但理想情況下,我希望跑上述在所有指定的列,在值列匹配,並填補了空白出0的命令。這可能在任何SQL實現?我目前正在使用SQLite,但我們處於一個相當開放的關係。
這是我的 '所需的' 輸出:
下面是一個使用子查詢一個選項與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
鑑於你想要的結果S,或許這就是你要找的內容,而不是使用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
你想組由多個列的一個選擇? – 2015-04-28 15:25:42
是的,我認爲是這樣 - 在這裏我寫了'價值',但在示例代碼中,實際上只是'col1'。在多列版本中,這不是列的值,而是所有列中唯一值的列表。我認爲解決方案在於找到這些獨特值的列表,並在整個表掃描過程中進行頻率計數,最後將結果放在上面。 –