1.limit(分页)
SELECT * FROM t LIMIT 80,10 -- 查询结果中从第81条记录开始,取10条,即81~90
2.group by(分组)
select id, sum(score) as 总分 from t group by id -- 与sum(),avg()等聚合函数联合使用
AVG() - 返回平均值
COUNT() - 返回行数
FIRST() - 返回第一个记录的值
LAST() - 返回最后一个记录的值
MAX() - 返回最大值
MIN() - 返回最小值
SUM() - 返回总和
3.having
“Where” 是一个约束声明,使用Where来约束来之数据库的数据,Where是在结果返回之前起作用的,且Where中不能使用聚合函数。
“Having”是一个过滤声明,是在查询返回结果集以后对查询结果进行的过滤操作,在Having中可以使用聚合函数。
注意:having后面跟的条件判断的字段必须是聚合函数返回的结果,用having就一定要和group by连用(对分组操作后的过滤)
表:t_level_user_score,t_level,t__user
例子:
SELECT u.name as '学生姓名',u.stu_number as '学生学号',
(SELECT level_name from t_level WHERE t_level.id=1) as '关卡1',
MAX(if(s.level_id=1,s.score,0))as '关卡1分数',
(SELECT level_name from t_level WHERE t_level.id=2) as '关卡2',
MAX(if(s.level_id=2,s.score,0))as '关卡2分数',
(SELECT level_name from t_level WHERE t_level.id=3) as '关卡3',
MAX(IF(s.level_id=3,s.score,0))as '关卡3分数',
MAX(if(s.level_id=1,s.score,0))+MAX(if(s.level_id=2,s.score,0))+MAX(if(s.level_id=3,s.score,0)) as '总分',
COUNT(s.id) -- 作答次数
from t_user u LEFT JOIN t_level_user_score s on u.id=s.user_id
GROUP BY u.id
HAVING 总分 > 200
ORDER BY 总分 DESC
LIMIT 1,10
查询结果超过10w条需要另外处理,超过10w条效率会很低。