簡體   English   中英

SQL 查詢:統計表中不同值的數量

[英]SQL Query: Count the number of distinct values in a table

我正在嘗試創建一個 SQL 查詢來計算 SQL 表中不同值的數量。 我的表有 6 列:

n1  n2  n3  n4  n5  n6
______________________
3   5   7   9   11  20
3   7   11  15  17  20
3   15  26  28  30  40
15  26  30  40  55  56
3   4   5   9   15  17
17  20  26  28  30  40

這是我想要得到的結果:

  value  frequency
______________________
    3       4
    4       1
    5       2
    7       2
    9       2
    11      2       
    15      3
    17      3   
    20      3
    26      3
    28      2
    30      3
    40      3
    55      1
    56      1

所以基本上,我需要查詢來查看整個表,記下出現的每個值,並計算特定值出現的次數。

使用UNION ALL獲取 1 列中的所有nX列值並聚合:

select value, count(*) as frequency
from (
  select n1 as value from tablename union all
  select n2 from tablename union all
  select n3 from tablename union all
  select n4 from tablename union all
  select n5 from tablename union all
  select n6 from tablename 
) t
group by value

為此,我建議cross apply

select v.n, count(*) as frequency
from t cross apply
     (values (n1), (n2), (n3), (n4), (n5), (n6)) v(n)
group by v.n;

cross apply實現橫向連接union all更有效地用於反透視數據。 如果您的“表”確實是一個視圖或復雜查詢,則尤其如此。

如果您使用的是SQL SERVERORACLE ,這是UNPIVOT的漂亮用例:

SELECT 
  [value]
  , count(*) frequency 
FROM 
( select n1,n2,n3,n4,n5,n6 from tablename) p
UNPIVOT ([value] for nums in ( n1,n2,n3,n4,n5,n6 )) as unpvt
GROUP BY [value]
ORDER BY frequency DESC

如果性能在那里很重要,這比 Union 更有效率。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM