关于Mysql一些细节

作者: 执小生 | 来源:发表于2019-02-24 15:17 被阅读30次

    一、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子句->最终结果 

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

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

    相关文章

      网友评论

        本文标题:关于Mysql一些细节

        本文链接:https://www.haomeiwen.com/subject/zozvyqtx.html