Вы можете создать таблицу чисел на лету и использовать ее для преобразования записей, где purchase_type
- это значение, разделенное запятыми, в новые строки. Тогда во внешнем запросе вы сможете правильно агрегировать.
Рассмотрим следующий запрос, который вы можете увидеть в действии в this db fiddle . Он будет динамически обнаруживать доступные типы покупки и генерировать ожидаемый результат:
SELECT x.purchase_type, SUM(x.noofsale)
FROM (
SELECT
t.noofsale,
SUBSTRING_INDEX(SUBSTRING_INDEX(t.purchase_type, ',', numbers.n), ',', -1) purchase_type
FROM
(SELECT 1 n UNION SELECT 2) numbers
INNER JOIN t ON CHAR_LENGTH(t.purchase_type) - CHAR_LENGTH(REPLACE(t.purchase_type, ',', ''))>= numbers.n-1
) x
GROUP BY x.purchase_type
ORDER BY 1,2
Примечание: этот запрос поддерживает не более двух значений, разделенных запятыми (как показано в примере данных); если вы ожидаете большего, вы можете адаптировать подзапрос numbers
:
(SELECT 1 n UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 ...)