我正在尝试找到具有最低分数的学生,这将是以下查询的结果。但是,我被要求在不使用MIN()的情况下编写查询。花了几个小时,但我无法找到替代解决方案:'(。
select s.sname
from student s
where s.score =
(select min(s2.score)
from score s2)
答案 0 :(得分:3)
这是一种方式,即使两名学生的得分最低也会有效。
SELECT distinct s1.sname
FROM student s1
LEFT JOIN student s2
ON s2.score < s1.score
WHERE s2.score IS NULL
以下是使用限制的方法,该方法将返回得分最低的学生,但如果其中多个得分相同,则只返回其中一个。
select sname
from student
order by score asc
limit 1
答案 1 :(得分:1)
这是JOIN
方法的可能替代方案:
select sname from student where score in
(select score from student order by score asc limit 1)
答案 2 :(得分:1)
create table student (name varchar(10), score int);
insert into student (name, score) values('joe', 30);
insert into student (name, score) values('jim', 88);
insert into student (name, score) values('jack', 22);
insert into student (name, score) values('jimbo', 15);
insert into student (name, score) values('jo bob',15);
/* folks with lowest score */
select name, score from student where not exists(select 1 from student s where s.score < student.score);
/* the actual lowest score */
select distinct score from student
where not exists(select 1 from student s where s.score < student.score);
请注意,不存在可能是非常低效的,但它可以在一小部分上完成工作。
答案 3 :(得分:1)
这样做的一种方法是按升序排序结果并取第一行。 但是如果你正在寻找一个更通用的解决方案,因为学生将有多个与他相关的分数,那么你需要找到每个学生的总分,然后找到总分最少的学生。
这是第一个场景,学生表中只有一行。
CREATE TABLE Student
(
SLNO INT,
MARKS FLOAT,
NAME NVARCHAR(MAX)
)
INSERT INTO Student VALUES(1, 80, 't1')
INSERT INTO Student VALUES(2, 90, 't2')
INSERT INTO Student VALUES(3, 76, 't3')
INSERT INTO Student VALUES(4, 98, 't4')
INSERT INTO Student VALUES(5, 55, 't5')
SELECT * From Student ORDER BY MARKS ASC
上面指定的第二种情况是,他在表格中有多行,因此我们在现有用户的表格中再插入两行。
然后我们选择用户,将他们的分数总和按名称分组,然后按总分排序
INSERT INTO Student VALUES(6, 55, 't1')
INSERT INTO Student VALUES(6, 90, 't5')
SELECT SUM(MARKS) AS TOTAL, NAME FROM Student
GROUP BY NAME
ORDER BY TOTAL
希望以上是您正在寻找的。 p>
答案 4 :(得分:-2)
您可以尝试使用存储过程查找得分最低的学生。