Question
- 一张表包含字段:user_id,登录时间
- 查出每个用户的最近登录时间,并按照user_id升序排序
- 学生表:学生id、学生姓名、xx
- 学生表:学生id、学生姓名、xx
- 学生表和分数表,通过学生号关联。
- 找出成绩前10名的学生姓名
- 分数是各科成绩,按照总分排序找出第一名的学生信息
- 分数是各科成绩,按照总分排序并找出成绩前10名的学生。
- 找出单科成绩最高的学生信息
Answer
- 查出每个用户的最近登录时间,并按照user_id升序排序
CREATE DATABASE test;
use test;
CREATE TABLE user (
user_id int,
logindate DATETIME
);
INSERT INTO user VALUES (1, '2024-10-22 10:16:02');
INSERT INTO user VALUES (2, '2024-10-22 10:16:02');
INSERT INTO user VALUES (1, '2024-10-23 10:16:03');
INSERT INTO user VALUES (2, '2024-10-21 10:16:01');
INSERT INTO user VALUES (4, '2024-10-20 10:16:02');
select user_id, max(logindate) from user group by user_id order by user_id
- 查出id最大的前3条记录
CREATE DATABASE test;
use test;
CREATE TABLE user (
user_id int,
logindate DATETIME
);
INSERT INTO user VALUES (1, '2024-10-22 10:16:02');
INSERT INTO user VALUES (2, '2024-10-22 10:16:02');
INSERT INTO user VALUES (1, '2024-10-23 10:16:03');
INSERT INTO user VALUES (2, '2024-10-21 10:16:01');
INSERT INTO user VALUES (4, '2024-10-20 10:16:02');
select * from user order by user_id desc limit 3;
select * from user order by user_id desc limit 0, 3;
- 查出重名的学生信息
select name from student group by name having count(*) >= 2
- 学生表和分数表,通过学生号关联
CREATE DATABASE test;
use test;
CREATE TABLE student (
id int,
name varchar(255)
);
CREATE TABLE score (
id int,
stuid int,
course varchar(255),
score varchar(255)
);
INSERT INTO student VALUES (1, '刘一');
INSERT INTO student VALUES (2, '陈二');
INSERT INTO student VALUES (3, '张三');
INSERT INTO student VALUES (4, '李四');
INSERT INTO student VALUES (5, '王五');
INSERT INTO student VALUES (6, '赵六');
INSERT INTO student VALUES (7, '孙七');
INSERT INTO student VALUES (8, '周八');
INSERT INTO student VALUES (9, '吴九');
INSERT INTO student VALUES (10, '郑十');
INSERT INTO score VALUES (1, 1, '语文', '80');
INSERT INTO score VALUES (2, 1, '数学', '80');
INSERT INTO score VALUES (3, 1, '英语', '85');
INSERT INTO score VALUES (4, 2, '语文', '81');
INSERT INTO score VALUES (5, 2, '数学', '80');
INSERT INTO score VALUES (6, 2, '英语', '85');
INSERT INTO score VALUES (7, 3, '语文', '81');
INSERT INTO score VALUES (8, 3, '数学', '82');
INSERT INTO score VALUES (9, 3, '英语', '90');
INSERT INTO score VALUES (10, 4, '语文', '81');
INSERT INTO score VALUES (11, 4, '数学', '82');
INSERT INTO score VALUES (12, 4, '英语', '90');
select name from stu a join score b on a.stuid = b.stuid order by b.score desc limit 10;
select sum(score) from score group by stuid order by sum(score) desc limit 1;
select stuid from score group by stuid having sum(score) = (select sum(score) from score group by stuid order by sum(score) desc limit 1);
select * from student a join (select stuid from score group by stuid having sum(score) = (select sum(score) from score group by stuid order by sum(score) desc limit 1)) c
on a.id = c.stuid;
select distinct(sum(score)) from score group by stuid order by sum(score) desc limit 2;
select stuid, sum(score) as total from score group by stuid
select * from (select stuid, sum(score) as score from score group by stuid) sc1
join
(select distinct(sum(score)) as score from score group by stuid order by sum(score) desc limit 2) sc2 on
sc1.score = sc2.score
select s.id, s.name from student s
join
(select * from (select stuid, sum(score) as score1 from score group by stuid) sc1
join
(select distinct(sum(score)) as score2 from score group by stuid order by sum(score) desc limit 2) sc2 on
sc1.score1 = sc2.score2) b on s.id = b.stuid
select distinct(sum(score)) from score group by stuid order by sum(score) desc limit 2;
select * from score s group by stuid HAVING SUM(score) in (select distinct(sum(score)) from score group by stuid order by sum(score) desc limit 2)
select * from student s join
(select * from score s group by stuid HAVING SUM(score) in (select distinct(sum(score)) from score group by stuid order by sum(score) desc limit 2)) scoretmp
on s.id = scoretmp.stuid
select course cid, max(score) as st from score group by course
select * from score sc
join
(select course cid, max(score) as st from score group by course) maxscore
on sc.course = maxscore.cid and sc.score = maxscore.st
select * from student s
join
(select sc.stuid from score sc join (select course cid, max(score) as st from score group by course) maxscore on sc.course = maxscore.cid and sc.score = maxscore.st) scoretmp
on s.id = scoretmp.stuid
Reference
- 牛客网:总分排名前三的学生