Bar*_*lom 29 mysql sql count subquery aggregate-functions
我有这个查询来获取PlayerSessions 的数量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
Run Code Online (Sandbox Code Playgroud)
我想修改它不仅显示重新连接的会话计数,还显示总计数,例如:
SELECT
country,
COUNT(*) AS total,
(COUNT WHERE reconnect = TRUE) AS with_reconnect
FROM PlayerSession S LEFT JOIN Player P ON (P.id = S.player_id)
GROUP BY country
Run Code Online (Sandbox Code Playgroud)
这是可能的,如果是这样,那么正确的语法是什么?
Gar*_*thD 63
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
Run Code Online (Sandbox Code Playgroud)
Sim*_*tal 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
Run Code Online (Sandbox Code Playgroud)
我只是重写了查询.每个PlayerSession都会有一个Player行,因此将其更改为INNER JOIN.此外,不需要CONCAT,因为此查询中始终存在PlayerSession行(除非没有会话)
| 归档时间: |
|
| 查看次数: |
39910 次 |
| 最近记录: |