mysql - (Mysql - 计算不同列中表中的值

标签 mysql 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 行的顶部,即使在按 asc/desc 对计数或 col 进行排序时,也必须显示 10 HIGHEST。我发现当我按 Count desc 排序时,简单的限制 10 是行不通的。然后我会得到 10 个最低值而不是最高值。

最佳答案

最简单的可能是 UNION ALLGROUP 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

An SQLfiddle to test with .

如果您希望将它限制在前 10 名,但订购了另一个方向,you can just wrap it in a subquery and order the outer one .

关于mysql - (Mysql - 计算不同列中表中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23616695/

相关文章:

mysql - Rails 无需迁移文件即可生成模型

php - Codeigniter 使用表单为表的每一行传递 id

mysql 百分比 2 位小数

sql - 检查所有行的列中的值是否完全相同

MySQL - 使用 2 列和计数按年份分组

sql - SELECT * FROM 表名 WHERE 1

php - 简单的 PHP 表单不提交

python - python 中的光标功能不起作用

sql - 无效的列名 '-'

mysql - 在另一列上使用 LIKE