Mysql 使用左外部联接返回计数,即使0
即使计数为0,我也尝试返回所有指定的事件\u abr 以下是我的SQL查询:Mysql 使用左外部联接返回计数,即使0,mysql,sql,Mysql,Sql,即使计数为0,我也尝试返回所有指定的事件\u abr 以下是我的SQL查询: SELECT basketball_event_types.event_abr, count(*) value FROM basketball_event_types LEFT OUTER JOIN basketball_game_events on basketball_event_types.id = basketball_game_events.event_type_id
SELECT
basketball_event_types.event_abr,
count(*) value
FROM
basketball_event_types
LEFT OUTER JOIN basketball_game_events on basketball_event_types.id = basketball_game_events.event_type_id
LEFT JOIN users on basketball_game_events.player_id = users.id
WHERE
users.id = 198
AND
basketball_game_events.game_id = 213
AND
(basketball_event_types.event_abr = "TO" OR basketball_event_types.event_abr = "AST")
GROUP BY basketball_event_types.event_abr
然而,当我运行这个时,指定的用户(198)对于指定的游戏(213)有0个AST。我想弹出AST->0,但它就是不弹出。我尝试的两件大事是在左连接中添加外部连接,我还尝试使用ifnull(count(*),0)。两者都没有给出我想要的结果。筛选需要在
on
子句中。您需要修复计数()
:
注意这些变化:
- 过滤被移动到子句上的
——两个过滤器都被移动到相应的子句
COUNT()
- 表别名使查询更易于编写和读取
中的
比一系列
或
条件更简单
COUNT()
统计表达式中非空值的数量。表达式是上一个表中的一列。我想问的是,是否有任何地方记录了count只对上一个联接表的非空值进行计数。这是所有数据库的普遍规律吗?@AnkitBajpai。事实并非如此。答案中的语句指的是在这个查询中使用的count()
——要做OP想要做的事情,它需要引用最后一个联接表中的一列。
SELECT bet.event_abr, COUNT(u.id) as value
FROM basketball_event_types bet LEFT JOIN
basketball_game_events bge
ON bet.id = bge.event_type_id AND bge.game_id = 213 LEFT JOIN
users u
ON bge.player_id = u.id AND u.id = 198
WHERE bet.event_abr IN ('TO', 'AST')
GROUP BY bet.event_abr;