我试图返回所有指定的事件_abr,即使计数为0。
这是我的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
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能弹出,但就是没有。我试过的两件大事是在LEFT JOIN中加入OUTER,我还试过使用ifnull(count(*), 0)。两种方法都没有得到我想要的结果。
筛选需要在 on
子句。 而你需要修正 count()
:
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;
注意这些变化。
ON
子句 -- 两者都过滤到适当的子句。COUNT()
计入最后一个 LEFT JOIN
表的别名使查询更容易编写和阅读。IN
表的别名比一连串的 OR
条件: