Группа не работает должным образом - PullRequest
0 голосов
/ 24 мая 2018

Нужна помощь с моим запросом SQL

Query : 

Select customer_id,
       if (call_details ='International' , 'International Calls', 'National Calls'),
       sum(minutes) 
from call_minutes 
where date between '$from' and '$to' 
group by call_details

Мой результат отображается следующим образом:

enter image description here

Пожалуйста, дайте мне знать, почему национальные звонки не группируются,Я хотел бы найти сумму национальных звонков и международных звонков

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

Для этого вам не нужен подзапрос, поскольку MySQL позволяет использовать псевдонимы столбцов в group by (не все базы данных это делают).Итак:

Select customer_id,
       (case when call_details = 'International'
             then 'International Calls'
             else 'National Calls'
        end) as call_group,
       sum(minutes) 
from call_minutes 
where date between '$from' and '$to' 
group by customer_id, call_group;

Примечание: это предполагает, что вы хотите отдельные строки для каждого клиента.Если нет, удалите customer_id как из select, так и из group by:

Select (case when call_details = 'International'
             then 'International Calls'
             else 'National Calls'
        end) as call_group,
       sum(minutes) 
from call_minutes 
where date between '$from' and '$to' 
group by call_group;

Если вы хотите получить список идентификаторов клиентов в каждой группе, вы всегда можете добавить group_concat(customer_id).

0 голосов
/ 24 мая 2018

использовать ниже SQL:

select customer_id,
       call_details,
       sum(minutes) as minutes
from(
Select customer_id,
       if (call_details ='International' , 'International Calls', 'National Calls') as call_details,
       minutes
from call_minutes 
where date between '$from' and '$to') x 
group by customer_id,call_details
...