我有以下表格(示例(
Analyze_Line
id | game_id | bet_result | game_type|
---|---|---|---|
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(,因为它可能不适合您。