Несколько столбцов условной суммы в одной таблице - PullRequest
0 голосов
/ 21 января 2019

У меня есть таблица, структурированная как показано ниже:

id  |sourceid |item |freq |siteid |customerid
61  |226      |2    |1    |262    |1  
301 |226      |1    |1    |262    |1  
495 |1        |32   |1    |262    |1  
658 |166      |8    |16   |262    |1  
1   |2        |4    |1    |333    |2  

Я пытаюсь сложить сумму «item», основанную на значении «freq», сгруппированную по «customerid», а затем"siteid"

Итак, на приведенном выше сайте 262 для клиента 1 сумма элементов с частотой 1 равна 35 (2 + 1 + 32). Мне нужно сделать то же самое для других частот, которые у меня есть.ниже

CREATE 
    ALGORITHM = UNDEFINED 
    DEFINER = `root`@`localhost` 
    SQL SECURITY DEFINER
VIEW `new_view` AS
    SELECT 
        `siteitems`.`customerID` AS `CID`,
        `siteitems`.`siteID` AS `AID`,
        SUM(`siteitems`.`item`) AS `Semi-annual`
    FROM
        `contractitems` `siteitems`
    WHERE
        (`siteitems`.`freq` = 1)
    GROUP BY `siteitems`.`customerID` , `siteitems`.`siteID`

Что дает мне 1 столбец для частот 1 Я не уверен, как добавить еще один столбец из той же таблицы, где частота 2 и т. д.

Должен ли яудалите предложение WHERE и измените SUM (каким-либо образом), чтобы просто суммировать нужные частоты, или мне нужно снова присоединиться к таблице?

1 Ответ

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

Из вашего описания это должно делать то, что вы хотите:

select customerid, siteid, freq, sum(item)
from contractitems ci
group by customerid, siteid, freq
order by customerid, siteid, freq;

Однако может потребоваться условное агрегирование:

select customerid, siteid,
       sum(case when freq = 1 then item else 0 end) as item_1,
       sum(case when freq = 2 then item else 0 end) as item_2,
       sum(case when freq = 4 then item else 0 end) as item_4,
       sum(case when freq = 8 then item else 0 end) as item_8,
       sum(case when freq = 16 then item else 0 end) as item_16
from contractitems ci
group by customerid, siteid
order by customerid, siteid;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...