#mysql
Вопрос:
У меня есть набор таблиц, в которых хранится ежедневная информация о регистрациях. Теперь мне нужен запрос в MySQL, содержащий общее количество записей по текущей дате. Я сделал запрос, который работает нормально, но я ожидал 0 (ноль) на компьютерах, которые не зарегистрировали никаких записей. Здесь он не возвращает 0.
Я попробовал IFNULL () и COALESCE (), но все равно получаю тот же результат. Пожалуйста, помогите с этим запросом. Спасибо…….
SELECT e.Equipo, COUNT(ec.ID_Equipo_Detalle) as captura
FROM equipos as e
LEFT JOIN equipos_detalle as eq
ON e.ID_Equipo = eq.ID_Equipo
LEFT JOIN elecciones_contactos as ec
on ec.ID_Equipo_Detalle = eq.ID_Equipos_Detalle
WHERE ec.FechaAlta BETWEEN CURRENT_DATE and CURRENT_DATE 1
GROUP by ec.ID_Equipo_Detalle
ID_Equipos | Equipos |
---|---|
1 | Zona 1 |
2 | Zona 2 |
3 | Zona 3 |
4 | Zona 4 |
5 | Zona 5 |
6 | Zona 6 |
7 | Zona 7 |
8 | Zona 8 |
ID_Equipos_Detalle | ID_Equipos | id_ответчик |
---|---|---|
1 | 1 | 152 |
2 | 2 | 158 |
3 | 3 | 156 |
4 | 4 | 156 |
5 | 5 | 176 |
6 | 6 | 178 |
7 | 7 | 167 |
8 | 8 | 172 |
ID_Contactos | ID_Equipos_Detalle | Contacto | Fecha_Alta |
---|---|---|---|
1 | 1 | Хорхе | 2021-04-26 12:20:27 |
2 | 2 | Педро | 2021-04-26 11:30:25 |
3 | 3 | Фернандо | 2021-04-26 11:20:23 |
4 | 4 | Фелипе | 2021-04-26 10:22:27 |
5 | 5 | Луис | 2021-04-25 10:22:27 |
6 | 6 | Алексис | 2021-04-25 10:12:30 |
7 | 7 | Победитель | 2021-04-24 09:22:28 |
8 | 8 | Сезар | 2021-04-24 09:15:27 |
Получен Результат:
Equipos | captura |
---|---|
Zona 1 | 1 |
Zona 2 | 2 |
Zona 5 | 1 |
Ожидаемый результат (где дата 2021 — 04 — 26):
Equipos | captura |
---|---|
Zona 1 | 1 |
Zona 2 | 2 |
Zona 3 | 0 |
Zona 4 | 0 |
Zona 5 | 1 |
Zona 6 | 0 |
Zona 7 | 0 |
Zona 8 | 0 |
Комментарии:
1. Вы повторно заявляете
e
… > >FROM equipos as e LEFT JOIN equipos_detalle as e
Это намеренно?2. Нет @Zak, я уже исправил
3. Вы пробовали группироваться с помощью ec.ID_Equipo_Detalle и ec. Фехаалта и то, и другое?
4. да, я пытался @RohitMittal
Ответ №1:
Вы отфильтровываете строки, в которых нет записей на заданную дату. Просто переместите фильтрацию в ЛЕВУЮ часть СОЕДИНЕНИЯ.
Так что вместо
LEFT JOIN elecciones_contactos as ec
on ec.ID_Equipo_Detalle = eq.ID_Equipos_Detalle
WHERE ec.FechaAlta BETWEEN CURRENT_DATE and CURRENT_DATE 1
GROUP by ec.ID_Equipo_Detalle
сделай это
LEFT JOIN elecciones_contactos as ec
on ec.ID_Equipo_Detalle = eq.ID_Equipos_Detalle
and ec.FechaAlta BETWEEN CURRENT_DATE and CURRENT_DATE 1
GROUP by e.ID_Equipos
Также обратите внимание, что я переместил группу с ec.ID_Equipo_Detalle
на e.ID_Equipos
Вот db-скрипка для демонстрации.
Ответ №2:
Ваше ГДЕ отбрасывает строки, вам нужно использовать подзапрос:
SELECT e.Equipo, COUNT(ec.ID_Equipo_Detalle) AS captura
FROM equipos AS e
LEFT JOIN equipos_detalle AS eq ON e.ID_Equipo = eq.ID_Equipo
LEFT JOIN (SELECT * FROM elecciones_contactos WHERE FechaAlta BETWEEN CURRENT_DATE and CURRENT_DATE INTERVAL 1 DAY) AS ec ON ec.ID_Equipo_Detalle = eq.ID_Equipos_Detalle
GROUP by ec.ID_Equipo_Detalle
Некоторые имена столбцов в вашем запросе не совпадают с ними в ваших таблицах (ID_Equipo в вашем запросе-это ID_Equipos в вашей таблице).