对 mysql 数据进行计数和分组
counting and grouping mysql data
说我有一个 table 有这样的数据 - 一个假设的赛车游戏
在每局游戏结束时,用户的姓名、他们在游戏中的位置以及他们赢得的奖金都会添加到 table
*****************************************
| 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 |
***************************
谢谢
您可以类似地处理这两个查询,因为它们都需要按用户分组。
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 了解其他选项。
说我有一个 table 有这样的数据 - 一个假设的赛车游戏
在每局游戏结束时,用户的姓名、他们在游戏中的位置以及他们赢得的奖金都会添加到 table
*****************************************
| 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 |
***************************
谢谢
您可以类似地处理这两个查询,因为它们都需要按用户分组。
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 了解其他选项。