[英]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 SERVER
或ORACLE
,这是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.