[英]SELECT SUM(DISTINCT values) across multiple columns in MYSQL
I have a MySQL table with 5 columns to store various values. 我有一个包含5列的MySQL表来存储各种值。 For each record in the table the 5 columns store a single value (one of about 15). 对于表中的每个记录,5列存储单个值(大约15个中的一个)。 Here's an example of the structure: 这是结构的一个例子:
| 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 |
I'd like to create a query that sums the unique values across each of those 5 columns. 我想创建一个查询,对这5列中的每一列的唯一值求和。 The result should show total number of times val1, val2, val3, etc are present across the 5 columns. 结果应显示5列中存在val1,val2,val3等的总次数。
Ideally the result would be structured as: 理想情况下,结果的结构如下:
val | total
_____________________
val1 | 34
val2 | 12
val3 | 23
val4 | 14
val5 | 21
etc | etc
Thanks in advance for the help, much appreciated. 在此先感谢您的帮助,非常感谢。
One way: SQL Fiddle 一种方法: SQL小提琴
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
Or another: SQL Fiddle 或者另一个: SQL小提琴
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.