Mysql 获取“中每个不同值的计数”;“多重”;柱

Mysql 获取“中每个不同值的计数”;“多重”;柱,mysql,sql,Mysql,Sql,让我们假设我有 | id | value | -------------- | 1 | A | | 2 | B | | 3 | B | | 4 | A | | 5 | A | 然后运行以下SQL语句 SELECT value, COUNT(*) AS `num` FROM test2 GROUP BY value 我会得到A:3和B:2 很好,但是如果我想从多个列中合并呢 | id | value | Value2 | Value 3| --

让我们假设我有

| id | value |
--------------
|  1 |   A   |
|  2 |   B   |
|  3 |   B   |
|  4 |   A   |
|  5 |   A   |
然后运行以下SQL语句

SELECT value, COUNT(*) AS `num` FROM test2 GROUP BY value
我会得到A:3和B:2

很好,但是如果我想从多个列中合并呢

| id | value | Value2 | Value 3|
---------------------------------
|  1 |   A   |   A    |    A   |
|  2 |   B   |   A    |    B   |
|  3 |   B   |   B    |    B   |
|  4 |   A   |   A    |    A   |
|  5 |   A   |   B    |    A   |

在上面的A:9 B:6中。目前,我只需运行上述语句3次,然后在php端添加值。但我认为可能有一个巧妙的小技巧,可以在一条语句中完成所有操作。

使用
Union all
将三列合并为一列,然后在外部查询中找到每个组的计数。试试这个

SELECT value,
       Count(value)
FROM   (SELECT value AS value FROM test2
        UNION ALL
        SELECT value2 FROM test2
        UNION ALL
        SELECT value3 FROM test2)a
GROUP  BY value 

首先,您可以对每个单独的列和组进行
计数
值,然后将结果与
UNION ALL
组合,最后对每个组进行
SUM
计算

SELECT `num`, SUM(`num`)
FROM (
    SELECT value, COUNT(*) AS `num` FROM test2 GROUP BY value
    UNION ALL
    SELECT value2, COUNT(*) AS `num` FROM test2 GROUP BY value2
    UNION ALL
    SELECT value3, COUNT(*) AS `num` FROM test2 GROUP BY value3
) GROUP BY `num`

我似乎在“字段列表”中得到了未知列“id”,我需要教自己更多关于工会的内容。非常感谢。我一有机会,就把答案记下来:)