每天一道SQL题
每天一道SQL题之day01
1、题目:
MySQL有一张名为tblog_pay的表,记录了玩家在游戏中的每笔充值记录,表中字段如下:
- 订单ID(order_id,主键唯一)
- 玩家ID(role_id)
- 充值金额(pay_money)
- 充值时间(pay_time,UNIX时间戳,普通索引)
请完成下列需求:
统计累充大于1w的玩家名单,按充值金额从高到底展示前10名的玩家id、累充金额、最后充值时间?
2、题解
SELECT role_id,SUM(pay_money) as tatal_pay,MAX(pay_time) as last_pay_time
FROM tblog_pay
GROUP BY role_id
HAVING total_pay > 10000
ORDER BY total_pay DESC
LIMIT 10;
3、解析
按需求可知道,按充值金额,故需要考虑到排序 ORDER BY 、
前10名 需要一个限制,取前10 Limit、累计大于考虑到使用SUM函数、最后充值时间即最大的时间,考虑MAX函数。
注意点:聚合函数中不能使用where子句