MySQL — Фильтруйте записи с помощью SUM

#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)