Mysql Сумма двух агрегатных функций не работает - PullRequest
0 голосов
/ 03 октября 2018

Привет! Я хочу добавить результат двух агрегатных функций, но я получаю «Недопустимое использование групповой функции».Может ли кто-нибудь исправить следующий запрос:

SELECT   mc.complaint_type_id,
         mc.complaint_type,
         sum(sum(case when c.is_solved = 1 then 1 else 0 end) + sum(case when ((c.is_solved = 0) and (c.res_user_id is null)) then 1 else 0 end)) as complaints_count,

    from  svk_apt_master_complaints mc
        left join svk_apt_complaints c on c.complaint_type_id = mc.complaint_type_id and c.is_active = 1
            and c.customer_id = 1 and c.association_id = 1

        group by mc.complaint_type_id

Ответы [ 3 ]

0 голосов
/ 03 октября 2018

Вам необходимо указать столбец mc.complaint_type в группе по

SELECT   mc.complaint_type_id,
         mc.complaint_type,
         sum(case when c.is_solved = 1 then 1 else 0 end) + sum(case when c.is_solved = 0 and c.res_user_id is null then 1 else 0 end) as complaints_count,
from  svk_apt_master_complaints mc
left join svk_apt_complaints c on c.complaint_type_id = mc.complaint_type_id and c.is_active = 1 and c.customer_id = 1 and c.association_id = 1
group by mc.complaint_type_id,mc.complaint_type
0 голосов
/ 03 октября 2018

Удалить вложенный sums и добавить mc.complaint_type к GROUP BY предложению.Если вам нужно добавить значения двух агрегатных функций, используйте оператор +, а не агрегатную функцию.

SELECT   
  mc.complaint_type_id,
  mc.complaint_type,
  sum(case when c.is_solved = 1 then 1 else 0 end) + sum(case when c.is_solved = 0 and c.res_user_id is null then 1 else 0 end) as complaints_count,
FROM svk_apt_master_complaints mc
LEFT JOIN svk_apt_complaints c ON 
  c.complaint_type_id = mc.complaint_type_id 
  and c.is_active = 1
  and c.customer_id = 1 
  and c.association_id = 1
GROUP BY mc.complaint_type_id, mc.complaint_type

Я также переформатировал ваш код и удалил ненужные скобки.

0 голосов
/ 03 октября 2018

Попробуйте:

SELECT   mc.complaint_type_id,
         mc.complaint_type,
         sum(case when c.is_solved = 1 then 1 else 0 end) + sum(case when ((c.is_solved = 0) and (c.res_user_id is null)) then 1 else 0 end) as complaints_count
from  svk_apt_master_complaints mc
left join svk_apt_complaints c on c.complaint_type_id = mc.complaint_type_id 
where c.is_active = 1 and c.customer_id = 1 and c.association_id = 1
group by mc.complaint_type_id, mc.complaint_type

Вам не нужно sum() при использовании оператора +.Кроме того, SUM является агрегатной функцией.

Также вы выбираете столбцы, которые не включаются в агрегат: mc.complaint_type.Вам нужно включить его в group by или просто удалить.

...