I have a MySQL table with 5 columns to store various values. For each record in the table the 5 columns store a single value (one of about 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. The result should show total number of times val1, val2, val3, etc are present across the 5 columns.
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
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
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