#mysql
Вопрос:
У меня есть студенческая таблица, как показано ниже —
CREATE TABLE `test`.`student` ( `student_id` INT NOT NULL, `student_marks` INT NULL);
Я хочу найти студента, сумма баллов которого превышает 500, но я не могу отфильтровать записи, однако я разрабатываю следующий запрос.
mysqlgt; select * from student; ------------ --------------- | student_id | student_marks | ------------ --------------- | 1 | 220 | | 2 | 100 | | 3 | 280 | | 2 | 430 | | 1 | 300 | ------------ --------------- 5 rows in set (0.00 sec) mysqlgt; select student_id, sum(student_marks) from student group by student_id; ------------ -------------------- | student_id | sum(student_marks) | ------------ -------------------- | 1 | 520 | | 2 | 530 | | 3 | 280 | ------------ -------------------- 3 rows in set (0.00 sec)
Ответ №1:
Вы можете использовать предложение HAVING: select student_id, sum(student_marks) from student group by student_id having sum(student_marks) gt; 500;
Комментарии:
1. Как составить сумму баллов в DESC?
2.
select student_id, sum(student_marks) from student group by student_id having sum(student_marks) gt; 500 order by sum(student_marks) desc;
Ответ №2:
Мы можем сделать, как показано ниже —
mysqlgt; select * from ( select student_id, sum(student_marks) as marks_of_student from student group by student_id) as f where f.marks_of_student gt; 500; ------------ ------------------ | student_id | marks_of_student | ------------ ------------------ | 1 | 520 | | 2 | 530 | ------------ ------------------ 2 rows in set (0.00 sec)