Mysql 单表查询各班级总分前三名

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mysql 单表查询各班级总分前三名相关的知识,希望对你有一定的参考价值。

1.班级字段class2.总分是ymsc+sxsc.3.成绩相同者保持并列.4.mysql版本5.7.21PS:必须仅用一条语句完成,回答优秀者经测试成功,再送你100分.表记录SQL语句:INSERT INTO st(`id`, `name`, `class`, `age`, `ywsc`, `sxsc`) VALUES (121, '钱式溢', '07-21', 22, 120, 59), (200, '沙雕', '07-23', 19, 108, 77), (203, '陈德丽', '07-21', 23, 97, 63), (208, '泰瑞宝', '07-25', 19, 98, 59), (209, '旺德福', '07-25', 28, 48, 114), (210, '我太富', '07-25', 31, 93, 123), (211, '黑宾', '07-25', 22, 101, 79), (212, '苟无敬', '07-25', 24, 118, 90), (213, '刘奶', '07-25', 23, 67, 79), (218, '李问', '07-23', 19, 108, 77), (219, '王说', '07-20', 28, 78, 99), (220, '侯启娥', '07-23', 31, 63, 101), (221, '沙俊德', '07-21', 22, 120, 79), (222, '百得说', '07-20', 24, 131, 90), (223, '尚且负', '07-20', 23, 107, 63), (224, '滚蛋', '07-23', 33, 140, 83), (226, '李凯华', '07-21', 22, 80, 79), (229, '马闭屏', '07-20', 24, 131, 78), (239, '操正德', '07-20', 28, 78, 92), (308, '张泗世', '07-23', 19, 108, 77), (319, '李拈迩', '07-20', 28, 77, 100), (320, '王埘陆', '07-23', 31, 63, 101), (321, '王实巴', '07-21', 22, 110, 79), (322, '马石臼', '07-25', 24, 111, 90), (323, '吴识参', '07-20', 23, 104, 73), (328, '赵念一', '07-23', 19, 98, 77), (329, '陈二式', '07-23', 23, 107, 63), (419, '李石武', '07-21', 28, 78, 91), (420, '周尓散', '07-23', 31, 63, 101), (422, '郑石耳', '07-23', 24, 81, 90);

参考技术A select class,total,name from (select *,ywsc+sxsc as total from st ORDER BY total DESC) b
where
not EXISTS(select * from (select *,ywsc+sxsc as total from st ORDER BY total DESC) c where c.class=b.class and b.total < c.total GROUP BY c.class HAVING COUNT(*)>2 )
ORDER BY b.class,b.total DESC追问

你已经做的很好了,但是测试结果还是有一条不符合,07-23班只查出了前2名。

追答

这是个bug如果是第一名有并列这个SQL还是有问题的

追问

07-23班是第二名有三个并列

参考技术B 表结构给出来追问

CREATE TABLE IF NOT EXISTS `st` (
`id` int(4) NOT NULL,
`name` varchar(20) NOT NULL,
`class` varchar(10) DEFAULT NULL,
`age` int(10) DEFAULT NULL,
`ywsc` int(30) DEFAULT NULL,
`sxsc` int(30) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

追答

select class,ywsc+sxsc as total from baidu.st group by class order by total desc limit 1, 3

追问

总分不是单列,需要你做个相加运算,ywsc+sxsc。

追答

我知道

已经你发给你了

追问

测试失败。是各个班级的前三名,前三名可不是只有三个人,总分相同要保持并列。你给的语句连全年级最高都没取出来。

追答

我再看看

以上是关于Mysql 单表查询各班级总分前三名的主要内容,如果未能解决你的问题,请参考以下文章

基于MySql数据库的单表与多表联合查询

mysql 数据操作 单表查询 having 过滤 练习

sql多表查询的问题

sql 怎么先分组再查询每组中前三天数据?

Sql单表查询语句

Sql单表查询语句