MySQL подсчет с ГДЕ и GROUP BY

0

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

$asksome= mysqli_query("
    SELECT COUNT(worker_id) AS amount, problem.datter AS datum
    FROM problem 
    WHERE worker_id = $idmed
    GROUP BY datter"
);

Структура выглядит так:

worker_id | datter    | note
1         |2018-02-25 | 
1         |2018-02-26 | 
3         |2018-02-25 |

Это запрос, который я использую. Я хочу, чтобы запрос показывал даты, даже если COUNT равен 0. Я имею в виду, что я хочу, чтобы результат был таким:

count result | date
0            | 2018-02-24
2            | 2018-02-25
1            | 2018-02-26
0            | 2018-02-27

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

SELECT weeks.week_id AS datum, COUNT(problem.datter) AS amount
    FROM weeks
    LEFT JOIN problem ON problem.datter = weeks.week_id
    GROUP BY weeks.week_id
  • 0
    Попробуйте поместить структуру вашей базы данных в таблицу проблем, чтобы можно было получить более ясную помощь.
  • 1
    Примечание. Объектно-ориентированный интерфейс к mysqli значительно менее многословен, что облегчает чтение и аудит кода, и его нелегко спутать с устаревшим интерфейсом mysql_query . Прежде, чем вы слишком инвестируете в процедурный стиль, стоит переключиться. Пример: $db = new mysqli(…) и $db->prepare("…") Процедурный интерфейс является артефактом эпохи PHP 4, когда был представлен mysqli API, и его не следует использовать в новом коде.
Показать ещё 3 комментария
Теги:
count
group-by

1 ответ

0

Вы должны четко указать, как обрабатывать счетчик, когда он равен 0. В общем случае при использовании SQL SUM() и COUNT() вместе с оператором GROUP BY 0 никогда не выводится. И это потому, что предложение GROUP BY не имеет ничего общего с тем, когда нет записей для вашего подсчета 0.

Для этого вы можете использовать выражение COALESCE.

Вы можете увидеть его документацию здесь: https://docs.microsoft.com/en-us/sql/t-sql/language-elements/coalesce-transact-sql

Поэтому в вашем примере запрос sql должен быть:

SELECT COALESCE (SELECT COUNT(worker_id) AS amount, problem.datter AS datum
FROM problem 
WHERE worker_id = $idmed
GROUP BY datter"), 0);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню