Frage

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.

War es hilfreich?

Lösung

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top