一尘不染

(My)SQL-计算表中不同列中的值

sql

我需要获取表中每个值的计数。问题是我需要从一张表的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量行的顶部,即使在按count或col按asc / desc进行排序时,也必须显示10 HIGHEST。我发现按Count
desc订购时,简单的限制10是行不通的。然后,我将获得10个最低值,而不是最高值。


阅读 114

收藏
2021-05-16

共1个答案

一尘不染

最简单的可能是UNION ALL带有a的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

要使用进行测试的SQLfiddle

如果您希望将其限制在前10位,但又将另一个方向排序,则可以将其包装在一个子查询中,然后对外部查询进行排序

2021-05-16