Вы можете использовать запрос объединения вместе с SPLIT_PART
:
WITH cte AS (
SELECT user, SPLIT_PART(col, ',', 1) AS val FROM yourTable UNION ALL
SELECT user, SPLIT_PART(col, ',', 2) FROM yourTable UNION ALL
SELECT user, SPLIT_PART(col, ',', 3) FROM yourTable UNION ALL
SELECT user, SPLIT_PART(col, ',', 4) FROM yourTable UNION ALL
SELECT user, SPLIT_PART(col, ',', 5) FROM yourTable UNION ALL
SELECT user, SPLIT_PART(col, ',', 6) FROM yourTable UNION ALL
SELECT user, SPLIT_PART(col, ',', 7) FROM yourTable UNION ALL
SELECT user, SPLIT_PART(col, ',', 8) FROM yourTable UNION ALL
SELECT user, SPLIT_PART(col, ',', 9) FROM yourTable UNION ALL
SELECT user, SPLIT_PART(col, ',', 10) FROM yourTable
)
SELECT
user,
val,
COUNT(*) AS cnt
FROM cte
GROUP BY
user,
val;
Но учтите, что все, что мы делаем выше в CTE, на самом деле просто нормализует ваши данные, так что каждое отношение пользователя и значения занимаетотдельная запись. В идеале вам следует изменить дизайн таблицы и отойти от хранения CSV.
Если вместо этого вам нужно просто подсчитать число на пользователя, используйте:
SELECT
user,
COUNT(*) AS cnt
FROM cte
GROUP BY
user;