我需要获取表中每个值的计数。问题是我需要从一个表中的3列中获取它。
(简化)数据库表看起来像这样:
+---------+------+--------+------+
| Id | Col1 | Col2 | Col3 |
+---------+------+--------+------+
| 1 | a | a | |
| 2 | b | null | a |
| 3 | b | b | c |
| 4 | d | a | null|
| 5 | a | c | c |
+---------+------+--------+------+
这就是我需要的结果:
+-------+-------+
| Col | Count |
+-------+-------+
| a | 5 |
| b | 3 |
| c | 3 |
| d | 1 |
+-------+-------+
有什么建议吗?
编辑:我也希望获得具有最高计数的x行数量的顶部,即使在计数或者col上按asc / desc进行排序时,必须显示10 HIGHEST。我发现当我通过Count desc订购时,一个简单的限制10将不起作用。然后我会得到10个最低值而不是最高值。
答案 0 :(得分:0)
您的原始问题可以使用union all
然后使用sum
case
来解决:
select 'a', sum(
(case when col1 = 'a' then 1 else 0 end)+
(case when col2 = 'a' then 1 else 0 end)+
(case when col3 = 'a' then 1 else 0 end))
from yourtable
union all
select 'b', sum(
(case when col1 = 'b' then 1 else 0 end)+
(case when col2 = 'b' then 1 else 0 end)+
(case when col3 = 'b' then 1 else 0 end))
from yourtable
...
答案 1 :(得分:0)
最简单的可能是UNION ALL
GROUP BY
;
SELECT col, COUNT(*) count
FROM (
SELECT col1 col FROM mytable UNION ALL
SELECT col2 col FROM mytable UNION ALL
SELECT col3 col FROM mytable
)z
GROUP BY col
HAVING col IS NOT NULL
ORDER BY count DESC
LIMIT 10
如果您希望将其限制在前10名,但订购了另一个方向,you can just wrap it in a subquery and order the outer one。