繁体   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