我有这个查询来获取PlayerSession
的{{1}}个数,按reconnect = TRUE
分组:
Player.country
我想修改它,不仅要显示重新连接的会话数,还要显示总数,例如:
SELECT
country,
COUNT(*) AS with_reconnect
FROM PlayerSession S LEFT JOIN Player P ON (P.id = S.player_id)
WHERE reconnect = TRUE
GROUP BY country
这是可能的,如果是这样,那么正确的语法是什么?
答案 0 :(得分:59)
SELECT Country,
COUNT(*) AS Total,
COUNT(CASE WHEN Reconnect = true THEN 1 END) AS With_Reconnect
FROM PlayerSession S
LEFT JOIN Player P
ON P.id = S.player_id
GROUP BY country
答案 1 :(得分:18)
以下就足够了
SELECT
p.country,
COUNT(*) AS total,
SUM(IF(s.reconnect=TRUE,1,0)) AS with_reconnect
FROM PlayerSession s
INNER JOIN Player p
ON p.id = s.player_id
GROUP BY p.country
我刚刚重写了查询。每个PlayerSession都会有一个Player行,因此将其更改为INNER JOIN。此外,不需要CONCAT,因为此查询中始终存在PlayerSession行(除非没有会话)
答案 2 :(得分:1)
SELECT
country,
COUNT(CASE WHEN reconnect = TRUE THEN S.player_id ELSE NULL END) AS with_reconnect,
COUNY(*)
FROM PlayerSession S LEFT JOIN Player P ON (P.id = S.player_id)
GROUP BY country
答案 3 :(得分:0)
SELECT
country,
COUNT(*) AS total,
sum(case when reconnect = TRUE then 1 else 0 end) AS with_reconnect
FROM PlayerSession S LEFT JOIN Player P ON (P.id = S.player_id)
GROUP BY country