关于Mysql一些细节

一、where过滤条件不能使用聚集函数

1、需求:显示sc 表中成绩大于平均成绩的记录

2、错误写法:select * FROM sc WHERE score>avg(score),这种写法是错的

3、正确写法:select * from sc where score>(select avg(score) from sc ),需要多一个子查询,或许有更方便的方法,可能我没有想到(菜鸟...)

二、group by高级用法

需求:求sc表中,选修3门课的学生所占比例


可能我们一开始,会直接通过group by sid having count(sid)=3去筛选选修3门课的学生,接下来下一步再去统计sc表的sid总数,那样写出来的语句可能就是:

SELECT t1.total,count(t2.sid) as 3_total, count(t2.sid)/t1.total from

(SELECT COUNT(DISTINCT sid) as total from sc) as t1,

(select sid from sc GROUP BY sid having COUNT(sid)=3) as t2

但是更好的语句:

select count(*) ,

count(if(t1.total=3,1,null)),

count(if(t1.total=3,1,null))/count(*)

from (SELECT  sid,count(sid)  as total FROM sc GROUP BY sid)t1

三、Mysql的执行顺序

开始->FROM子句->WHERE子句->GROUP BY子句->HAVING子句->ORDER BY子句->SELECT子句->LIMIT子句->最终结果 


努力努力再努力,认真做练习,不断总结不断深化,才能真正掌握!

第一次写简书,排版美观还不会优化,见谅见谅~~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容