计算和分组mysql数据

时间:2015-07-06 22:18:38

标签: php mysql php-5.3

说我有一个包含这样数据的表 - 一个假想的赛车游戏

在每场比赛结束时,用户的名字,他们在比赛中的位置以及他们获得的奖金都会被添加到表格中

 *****************************************
 | 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               | 
 ***************************

由于

1 个答案:

答案 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了解其他选项。