Проблема с запросом MySQL

#mysql #count #where-in

#mysql #подсчет #где-в

Вопрос:

У меня есть текущая настройка базы данных:

 Forename | Surname | Department | Completion_Status
Tom        Smith     Sales        Started
Bob        Jones     Sales        Completed
Alison     Baines    Sales        Not Started
Arthur     Smith     Marketing    Started
Claire     Staines   Marketing    Completed
  

Я могу без каких-либо проблем вернуть общее количество строк и общее число, где статус завершения либо начат, либо завершен, но не в одном операторе — однако то, что я хотел бы сделать в одном операторе, это:

 COUNT for Department As Total AND the COUNT for Department As Responses WHERE Completion_Status IN ('Started', 'Completed')
  

Это выглядело бы примерно так:

 Department | Total | Responses
Sales        3       2
Marketing    2       2
  

Надеюсь, это имеет смысл!?

Спасибо, Гомер.

Ответ №1:

ВЫБЕРИТЕ отдел,
       КОЛИЧЕСТВО(отдел) КАК общее,
       ПОДСЧИТЫВАТЬ(completion_status) КАК ответы
ИЗ tresults
, ГДЕ completion_status В ( ‘Начато’, ‘Завершено’)
ГРУППИРОВАТЬ По подразделениям
, УПОРЯДОЧИВАТЬ По dep

Комментарии:

1. Вы забыли добавить отдел в список выбора.

2. Принимая ваше предложение — ВЫБЕРИТЕ отдел, КОЛИЧЕСТВО (dept) Как итог И КОЛИЧЕСТВО (completion_status) Как ответы ОТ tresults, ГДЕ completion_status В (‘Начато’, ‘Завершено’) ГРУППИРУЕТСЯ По порядку отделов По отделам — это возвращает ошибку SQL — есть предложения?

3. Привет, перепроверено — возвращает значение 1 для всего — что неверно.

4. ВЫБЕРИТЕ dept, COUNT (отдел) КАК total, COUNT (completion_status) КАК ответы ИЗ tresults, ГДЕ completion_status = ‘Started’ ИЛИ completion_status = ‘Completed’ ГРУППИРУЙТЕ По отделу, ЗАКАЗЫВАЙТЕ По dep

Ответ №2:

 select 
department,
count(department) as total,
sum(if(completion_status  IN ('Started', 'Completed'),1,0)) as responses
from table
group by department
  

Это более стандартная версия

 select 
department,
count(department) as total,
sum(case when completion_status in ('Started', 'Completed') then 1 else 0 end ) as responses
from table
group by department
  

Комментарии:

1. Хорошо, это кажется близким — возвращает правильные итоговые значения, но оба ответа равны 1, и это неверно. Есть предложения?

2. Перепроверено — возвращает правильное значение для Total, но def возвращает bck 1 для ответов — это неправильно : (