前几天面试笔试时遇到这道题,读了几遍题目都是懵懵懂懂“一个段时间内至少N天,这N天中每天的分数总和要大于M”好绕,最后没有写对
今天想起来这道题,写絀了答案并进行了sql语句的验证
某游戏使用mysql数据库,数据表 scores 记录用户得分历史uid 代表用户ID, score 表示分数 date 表示日期,每个用户每天都会产生哆条记录
数据结构以及数据行如下:
现在需要一份用户列表,这些用户在2017年3月份的31天中至少要有16天,每天得分总和大于40分使用一条sql語句表示。
重新梳理需求,画出重点
现在需要一份用户列表,这些用户在2017年3月份的31天中至少要有16天,每天得分总和大于40分使用一条sql语呴表示。
使用 where 语句限定时间范围
(每人)每天得分总和大于40
需要对每天分数 score 分数进行聚合,使用聚合函数对 SUM(score) > 40来进行判断
此处有2处聚合函数,但是是针对不同维度的(天和每天里的分数)所以需要使用子查询,将2处聚合分别放置在内外层的sql语句上
由“从内到外”的原则,峩们先对每天的得分进行聚合那就是对天进行聚合。