PostgreSQL根据具体情况分组并计数



我有以下表格(示例(

Analyze_Line

game_type
id game_id bet_result
1 1 WIN 0
2 2 丢失 0
3 3 WIN 0
4 4 丢失 0
5 5 丢失 0
6 6 WIN 0

补充Kamil的答案-PostgreSQL在大约八年前(2014年12月(发布的PostgreSQL 9.4中引入了filter子句。在这一点上,我认为在答案中使用它是足够安全的。IMHO,它比在case表达式上求和要优雅一些,但它确实有PostgreSQL特定语法的缺点,因此不可移植:

SELECT   g.league_id,
COUNT(*) FILTER (WHERE a.bet_result = 'WIN') AS win,
COUNT(*) FILTER (WHERE a.bet_result = 'LOSE') AS lose,
COUNT(*) AS gamecnt
FROM     game g
JOIN     analyze_line a ON g.id = a.game_id
GROUP BY g.league_id

您可以在聚合函数中使用条件来划分每个联盟的输赢赌注结果。

select
g.league_id,
sum(case when a.bet_result = 'WIN' then 1 end) as win,
sum(case when a.bet_result = 'LOSE' then 1 end) as lose,
count(*) as gamecnt
from 
game g
inner join analyze_line a on
g.id = a.game_id
group by 
g.league_id

由于没有提到postgresql版本,我不建议使用FILTER子句(postgres-specific(,因为它可能不适合您。

最新更新