Column coma separated value

To extract the list of all x,y,z, stored in the same column: (max 5 values)

SELECT DISTINCT TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(category, ',', n), ',', -1)) AS category
FROM mytable
JOIN (
    SELECT 1 AS n UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5
) AS numbers
ON CHAR_LENGTH(category) - CHAR_LENGTH(REPLACE(category, ',', '')) >= n - 1
WHERE category IS NOT NULL;

and to also have the number of occurrences

SELECT category, COUNT(*) AS occurrences
FROM (
    SELECT
        TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(c.category, ',', n), ',', -1)) AS category
    FROM mytable c
    JOIN (
        SELECT 1 AS n UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5
    ) AS numbers
    ON CHAR_LENGTH(c.category) - CHAR_LENGTH(REPLACE(c.category, ',', '')) >= n - 1
    WHERE c.category IS NOT NULL
) AS extracted
GROUP BY category
ORDER BY occurrences DESC;

Last updated