PostgreSQL按条件分组计数:关联两表分组后统计WIN、LOSE数量
实现思路
核心用条件聚合实现不同bet_result值的分别计数,配合两表关联+分组即可得到目标结果。
具体SQL实现
SELECT g.league_id, COUNT(CASE WHEN al.bet_result = 'WIN' THEN 1 END) AS WIN, COUNT(CASE WHEN al.bet_result = 'LOSE' THEN 1 END) AS LOSE, COUNT(*) AS GameCnt FROM Game g INNER JOIN Analyze_Line al ON g.id = al.game_id GROUP BY g.league_id;
逻辑说明
- 首先用
INNER JOIN关联两张表,关联条件为Game表的id和Analyze_Line表的game_id匹配 - 统计WIN计数时,通过
CASE WHEN判断bet_result为WIN时返回有效值,COUNT函数只会统计非空值,所以就能得到对应WIN的记录数,LOSE的计数逻辑同理 COUNT(*)直接统计分组后每个league_id对应的总记录数,也就是GameCnt- 最后按league_id分组输出即可
如果你的SQL环境支持IF函数(比如MySQL),还可以简化成更短的写法:
SELECT g.league_id, SUM(IF(al.bet_result = 'WIN',1,0)) AS WIN, SUM(IF(al.bet_result = 'LOSE',1,0)) AS LOSE, COUNT(*) AS GameCnt FROM Game g INNER JOIN Analyze_Line al ON g.id = al.game_id GROUP BY g.league_id;
内容的提问来源于stack exchange,提问作者Codshark11
相关产品推荐
相关产品推荐

