Работа с разделенным запятыми значением в группе по предложению - PullRequest
0 голосов
/ 22 января 2019

У меня есть столбец с именем purchasetype, который содержит три вида значений new, trial, new,trial еще один столбец в noofsales
Я считаю общее число на основе purchasetype
Я использую запрос

   Select SUM(noofsales) 
     From table 
  GroupBy purchasetype

Этот запрос дает мне 3 вида результата сумм new, trial и new,trial
Я хочу получить общую сумму в new иtrial только если одна запись содержит new,trial, тогда для new должно увеличиться одно число, а для trial
также должно быть увеличено одно число. Я попытался использовать функцию substring_index, например

Select SUM(noofsales) 
     From table 
  Groupby substring_index(PurchaseType, ',', 0)

, ноэто суммирование только для первой записи через запятую.

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Вы можете создать таблицу чисел на лету и использовать ее для преобразования записей, где 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 ...)
0 голосов
/ 22 января 2019

В вашем случае вы можете использовать оператор CASE / WHEN для каждой суммы.Например:

запрос SELECT с условием CASE и SUM ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...