首页 > 解决方案 > 如果没有找到记录,则计数返回 0

问题描述

我有一组表格来保存注册的日常信息。现在我需要在 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 第一区
2 区域 2
3 区域 3
4 4区
5 5区
6 6区
7 7区
8 8区
ID_Equipos_Detelle ID_Equipos ID_Responsable
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_联系人 ID_Equipos_Detelle 联系方式 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 捕获
第一区 1
区域 2 2
5区 1

预期结果(日期为 2021 - 04 - 26):

Equipos 捕获
第一区 1
区域 2 2
区域 3 0
4区 0
5区 1
6区 0
7区 0
8区 0

标签: mysql

解决方案


您的 WHERE 正在丢弃行,您需要使用子查询:

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)。


推荐阅读