Запрос находит максимальный балл для каждого пользователя, добавь к нему столбец COUNT(*) - MySQL
Формулировка задачи:
Есть запрос, который возвращает Имя пользователя и его максимальный балл в экзаменационном режиме (isExam = 1):
Как к нему добавить столбец, который бы считал из какого количества строк мы искали максимальный балл?
ПС:
SELECT CONCAT(u.user_lname, ' ', u.user_fname) AS 'Пользователь', ROUND(r.bal, 1) AS 'Балл' FROM reports r JOIN users u ON r.user_id = u.id WHERE isExam = 1 AND r.true_answers IN (SELECT MAX(r2.true_answers) FROM reports r2 WHERE r2.user_id = r.user_id) ORDER BY 1
Решение задачи: «Запрос находит максимальный балл для каждого пользователя, добавь к нему столбец COUNT(*)»
textual
Листинг программы
SELECT CONCAT(u.user_lname, ' ', u.user_fname) AS 'Пользователь', ROUND(r.bal, 1) AS 'Балл', tmp.coun AS 'Количество попыток' FROM reports r JOIN users u ON r.user_id = u.id JOIN ( SELECT COUNT(*) AS coun, r.user_id FROM reports r JOIN users u ON r.user_id = u.id WHERE u.user_fname <> '' AND r.isExam = 1 GROUP BY user_id ) AS tmp ON r.user_id = tmp.user_id WHERE u.user_fname <> '' AND r.true_answers IN ( SELECT MAX(r2.true_answers) FROM reports r2 WHERE r2.user_id = r.user_id AND r2.isExam = 1 ) GROUP BY r.user_id ORDER BY 1
Объяснение кода листинга программы
- Код объединяет три таблицы: reports, users и (временную) tmp.
- В первой строке выбираются поля: имя пользователя, округленный балл и количество попыток.
- Вторая строка кода объявляет подзапрос, который считает количество попыток для каждого пользователя, где поле fname не пустое и isExam равно 1.
- Третья строка кода присоединяет результаты подзапроса к основной выборке по идентификатору пользователя.
- Четвертая строка кода фильтрует выборку, оставляя только пользователей с непустым fname и количеством правильных ответов, равным максимальному для данного пользователя.
- Пятая строка кода группирует результаты по идентификатору пользователя.
- Шестая строка кода сортирует результаты по имени пользователя.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д