说我有一个包含这样数据的表 - 一个假想的赛车游戏
在每场比赛结束时,用户的名字,他们在比赛中的位置以及他们获得的奖金都会被添加到表格中
*****************************************
| name | place | date | winnings |
| bob | 1 | 2015-07-08 | 100 |
| bob | 2 | 2015-07-07 | 75 |
| john | 1 | 2015-07-07 | 100 |
| john | 1 | 2015-07-04 | 100 |
| sarah | 9 | 2015-07-05 | 1000 |
*****************************************
我会使用以下查询来获取此
select h.name, z.place, z.date, z.winnings from races as z, users as h where h.id = z.user_id order by date desc
我的问题是
我怎么能输出这样的东西? (将奖金加在一起并与他们分类)
**************************
| name | total_winnings |
| sarah | 1000 |
| john | 200 |
| bob | 175 |
**************************
以及如何根据他们获胜的次数(排名第一)排序
***************************
| name | won_first_place |
| john | 2 |
| bob | 1 |
| sarah | 0 |
***************************
由于
答案 0 :(得分:2)
您可以类似地处理这两个查询,因为两者都需要用户进行分组。
SELECT
users.name,
SUM(races.winnings) AS total_winnings
FROM users INNER JOIN races ON users.id = races.user_id
GROUP BY users.id
ORDER BY SUM(races.winnings) DESC
应该可以获得总奖金,
SELECT
users.name,
SUM(CASE WHEN races.place=1 THEN 1 ELSE 0 END) AS won_first_place
FROM users INNER JOIN races ON users.id = races.user_id
GROUP BY users.id
ORDER BY SUM(CASE WHEN races.place=1 THEN 1 ELSE 0 END) DESC
应该为您提供用户获得第一名的次数。
使用GROUP BY
时,您可以对分组行中的列使用许多不同的聚合函数,例如SUM
。您可以查看MySQL documentation了解其他选项。