#mysql
Вопрос:
У меня есть следующие таблицы.
Случай
ID | Имя |
---|---|
1 | Антон |
2 | Elfriede |
3 | Осрам |
Назначения
ID | Продолжительность | Случай |
---|---|---|
1 | 70 | 1 |
2 | 70 | 2 |
Fastdocu без предварительной записи
ID | Продолжительность | Случай |
---|---|---|
1 | 15 | 2 |
2 | 15 | 2 |
3 | 50 | 3 |
3 | 8 | 3 |
Мне нужно суммировать всю продолжительность и все встречи, а также дела, которые не записаны на прием.
Результат должен быть
Продолжительность 88
Встреч 3
Случая 1
Следующее заявление, которое я написал
Select sum(duration), count(DISTINCT ID), SUM(IF(`Case` NOT IN (1,2),1,0)) From Fastdocu
Внезапно результат таков
Продолжительность 88
Встреч 3
Случая 2
Я должен суммировать только отдельные идентификаторы при подсчете обращений. Но, по-видимому, в if это различие запрещено. Как я могу правильно подсчитать случаи?
Комментарии:
1.
CASE
это зарезервированное слово в MySQL . Заключите его в обратные галочки, чтобы использовать в качестве идентификатора.2. Добавили побег. Спасибо за информацию.
Ответ №1:
Используйте COUNT()
с CASE
выражением вместо SUM()
:
SELECT SUM(duration) total_duration,
COUNT(DISTINCT ID) distinct_ids,
COUNT(DISTINCT CASE WHEN `Case` NOT IN (1,2) THEN `Case` END) cases_not_in_Appointments
FROM Fastdocu
Поскольку COUNT()
у него нет ELSE
ветви, он не будет считать Case
s, которые не удовлетворяют условию Case NOT IN (1,2)
, потому что в этом случае результатом CASE
выражения будет NULL
.
Если вы хотите посчитать отдельные id
s, а не отдельные Case
s, измените значение на:
COUNT(DISTINCT CASE WHEN `Case` NOT IN (1,2) THEN ID END)
Смотрите демонстрацию.
Результаты:
total_duration distinct_ids Случаи не_в_приложениях 88 3 1
Комментарии:
1. Проголосовали против, но это может потребовать некоторого объяснения.
CASE
Выражение безELSE
предложения возвращает значение NULL, если ни одно выражение не сопоставлено, иCOUNT()
игнорирует значения NULL.2. @БиллКарвин справедливое замечание. Я добавил краткое объяснение.
3. Может быть, мы можем использовать двойные случаи, чтобы это выглядело как ПОДСЧЕТ(ОТДЕЛЬНЫЙ СЛУЧАЙ, КОГДА
Case
НЕ В (1,2), А ЗАТЕМCase
КОНЕЧНЫЙ СЛУЧАЙ, КОГДАCase
В (1,2), А ЗАТЕМ 0 КОНЕЦ )4. @Collie-ITAnneK. Фрей, это синтаксически неверно. Зачем вам 2 — й СЛУЧАЙ?
5. Хорошо, я не понял еще одно предложение ответа.