跨 MYSQL 中的多个列选择 SUM(DISTINCT 值)

Posted

技术标签:

【中文标题】跨 MYSQL 中的多个列选择 SUM(DISTINCT 值)【英文标题】:SELECT SUM(DISTINCT values) across multiple columns in MYSQL 【发布时间】:2013-12-09 22:49:55 【问题描述】:

我有一个包含 5 列的 mysql 表来存储各种值。对于表中的每条记录,5 列存储一个值(大约 15 个值之一)。下面是一个结构示例:

| COL1 | COL2 | COL3 |  COL4 |  COL5 |
|------|------|------|-------|-------|
| val1 | val3 | val8 | val11 | val14 |
| val2 | val3 | val5 |  val9 | val12 |
| val1 | val2 | val6 | val14 | val15 |
| val3 | val5 | val9 | val10 | val12 |
| val2 | val4 | val7 | val11 | val14 |

我想创建一个查询,将这 5 列中每一列的唯一值相加。结果应显示 val1、val2、val3 等在 5 列中出现的总次数。

理想情况下,结果的结构如下:

val  | total
_____________________

val1 |  34

val2 |  12

val3 |  23

val4 |  14

val5 |  21

etc  |  etc

提前感谢您的帮助,非常感谢。

【问题讨论】:

添加一些示例数据,到目前为止你有什么? 【参考方案1】:

一种方式:SQL Fiddle

SELECT val,
       COUNT(*) AS total
FROM   (SELECT Col1 AS Val
        FROM   YourTable
        UNION ALL
        SELECT Col2 AS Val
        FROM   YourTable
        UNION ALL
        SELECT Col3 AS Val
        FROM   YourTable
        UNION ALL
        SELECT Col4 AS Val
        FROM   YourTable
        UNION ALL
        SELECT Col5 AS Val
        FROM   YourTable) AS T
GROUP  BY val 

或其他:SQL Fiddle

SELECT CASE N
         WHEN 1 THEN Col1
         WHEN 2 THEN Col2
         WHEN 3 THEN Col3
         WHEN 4 THEN Col4
         WHEN 5 THEN Col5
       END AS Val,
       COUNT(*) AS total
FROM   YourTable
       CROSS JOIN (SELECT 1 AS N
                   UNION ALL
                   SELECT 2
                   UNION ALL
                   SELECT 3
                   UNION ALL
                   SELECT 4
                   UNION ALL
                   SELECT 5) AS T
GROUP  BY Val

【讨论】:

干得好!第一个解决方案完美运行。感谢您的帮助。

以上是关于跨 MYSQL 中的多个列选择 SUM(DISTINCT 值)的主要内容,如果未能解决你的问题,请参考以下文章

mysql 求和语句

Mysql sum distinct 基于包含多个 LEFT JOIN 的其他列

Mysql 选择不同的

在 mysql 中使用 SUM 和多个连接

MYSQL:选择一列的 SUM 但该列基于另一个行 ID

关于列中的选择查询 - mysql