跨 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 值)的主要内容,如果未能解决你的问题,请参考以下文章