博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mySql分组排序
阅读量:4587 次
发布时间:2019-06-09

本文共 1873 字,大约阅读时间需要 6 分钟。

mysql 排序学习---mysql

 

1、建表语句

CREATE TABLE `student` (

`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) COLLATE utf8_bin NOT NULL COMMENT '姓名',
`score` int(11) NOT NULL COMMENT '成绩,
`classid` int(11) NOT NULL COMMENT '班级',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='学生';

 2、插入数据

insert into student(Name, Score, ClassId) values("lqh", 60, 1);

insert into student(Name, Score, ClassId) values("cs", 99, 1);
insert into student(Name, Score, ClassId) values("wzy", 62, 1);
insert into student(Name, Score, ClassId) values("zqc", 88, 2);
insert into student(Name, Score, ClassId) values("bll", 100, 2);

3、开始玩转MySQL

查询每个班级最大分数

select max(t.score) score,t.classid from student t group by t.classid 

 

显然这个在实际应用中不合场景,上面只能查出每个班级的最高分,但是是谁查不到

用下面这个语句,用分组的最高分、班级去原表中去匹配,命中出结果,就是相应的学生信息:

select s.* from student s join

(select max(t.score) score,t.classid from student t group by t.classid )r
on s.classid=r.classid and s.score=r.score  

最高的第一名查出来了,但是比如我们要找前3名,前5名是谁,怎么搞?group by的max函数只能取最大值,前几个怎么玩???

limit 3,limit 5,group 里面没有这么玩的,limit只是对查出的结果做最外层的封装

SELECT    s1.*FROM    student s1WHERE    (        SELECT            count(DISTINCT(s2.score))        FROM            student s2        WHERE            s1.classid = s2.classid        AND s2.score > s1.score    ) < 2;

先给结果,但是这个我理解不了,为什么where条件为什么这样写?

select a.classid,a.`name`,a.score ,a.id ,b.id ,count(b.id)from student a left join student b on a.classid=b.classid and a.score

上面这个SQL就好理解多了

select a.classid,a.`name`,a.score ,a.id ,b.id ,count(b.id)from student a left join student b on a.classid=b.classid and a.score

先看这个,一下子就明白了,把a表中的每个成绩都排个序,count(b.id)就是成绩的排名,0就是第一,没有比这个分数更高的,1就表示第二,只有一个比这个分数高的,依次类推

having count下 ,你要取前2名的话 having count就小于2,感觉这个好理解多了 

 

 

 

 https://blog.csdn.net/github_26672553/article/details/50800835

转载于:https://www.cnblogs.com/longxok/p/10980509.html

你可能感兴趣的文章
1084 Broken Keyboard (20 分)
查看>>
winfrom获得鼠标的坐标
查看>>
Ubuntu14.04下安装Hadoop2.5.1 (单机模式)
查看>>
如何完成需求文档
查看>>
【翻译】浏览器渲染Rendering那些事:repaint、reflow/relayout、restyle
查看>>
2019 GDUT Rating Contest I : Problem G. Back and Forth
查看>>
Keras入门——(6)长短期记忆网络LSTM(三)
查看>>
高效算法的常用技术(算法导论)
查看>>
TCP、UDP套接字网络协议
查看>>
STDIN_FILENO与stdin区别(转)
查看>>
页面操作postback后保持滚动条位置
查看>>
nginx动静分离小示例
查看>>
nginx socket转发设置
查看>>
centos samba搭建
查看>>
Android Studio 错误: 非法字符: '\ufeff'
查看>>
并发编程--一堆锁,GIL,同步异步,Event事件
查看>>
svn配置
查看>>
解决SQLite database is locked
查看>>
Javascript中this关键字
查看>>
微信静默授权
查看>>