我有2桌游戏和投注。我想计算每场比赛的投注数量。但是,当没有特定游戏ID的赌注时,我当前的查询不包括游戏。
这是我当前的查询:
SELECT g.*,
Count(*) AS participants
FROM game g,
bet b
WHERE b.game_id = g.id
AND USER = ?
GROUP BY g.id
所以为了让它更清晰,我可以说我的Game表中有3行。对于game1有4个投注,对于game2有2个投注,并且在Bet表中没有与game3相关联的行。结果应该是:
g1 4
g2 2
g3 0
我很感激任何帮助。
答案 0 :(得分:1)
使用左连接并计算投注表中存在的列。对于未能加入到投注表的游戏记录,将在预先分组的结果集中返回单行,该结果集在投注表的所有列中将为空。由于count()
聚合函数不计算空值,因此对于未能加入的游戏记录,您将获得零。
select g.*, count(b.game_id) participants
from game g left join bet b on b.game_id=g.id
where user=?
group by g.id
答案 1 :(得分:0)
SELECT g。*,b.count(game_id)作为参与者来自游戏g LEFT加注下注b b.game_id = g.id和user =?分组由g.id;
Example
mysql> SELECT * FROM calls;
+----+------------+---------+
| id | date | user_id |
+----+------------+---------+
| 1 | 2016-06-22 | 1 |
| 2 | 2016-06-22 | NULL |
| 3 | 2016-06-22 | NULL |
| 4 | 2016-06-23 | 2 |
| 5 | 2016-06-23 | 1 |
| 6 | 2016-06-23 | 1 |
| 7 | 2016-06-23 | NULL |
+----+------------+---------+
7 rows in set (0.00 sec)
mysql> SELECT * FROM payments;
+----+------------+---------+-------+
| id | date | user_id | value |
+----+------------+---------+-------+
| 1 | 2016-06-22 | 1 | 10 |
| 2 | 2016-06-22 | 3 | 15 |
| 3 | 2016-06-22 | 4 | 20 |
| 4 | 2016-06-23 | 2 | 100 |
| 5 | 2016-06-23 | 1 | 150 |
+----+------------+---------+-------+
5 rows in set (0.00 sec)
mysql> SELECT c.*,count(p.user_id) FROM calls c LEFT JOIN payments p ON p.user_id=c.user_id GROUP BY c.user_id;
+----+------------+---------+------------------+
| id | date | user_id | count(p.user_id) |
+----+------------+---------+------------------+
| 2 | 2016-06-22 | NULL | 0 |
| 1 | 2016-06-22 | 1 | 6 |
| 4 | 2016-06-23 | 2 | 1 |
+----+------------+---------+------------------+
3 rows in set (0.00 sec)