MySQL下SQL整理1、

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条效率会很低。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值