Запрос находит максимальный балл для каждого пользователя, добавь к нему столбец 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

Объяснение кода листинга программы

  1. Код объединяет три таблицы: reports, users и (временную) tmp.
  2. В первой строке выбираются поля: имя пользователя, округленный балл и количество попыток.
  3. Вторая строка кода объявляет подзапрос, который считает количество попыток для каждого пользователя, где поле fname не пустое и isExam равно 1.
  4. Третья строка кода присоединяет результаты подзапроса к основной выборке по идентификатору пользователя.
  5. Четвертая строка кода фильтрует выборку, оставляя только пользователей с непустым fname и количеством правильных ответов, равным максимальному для данного пользователя.
  6. Пятая строка кода группирует результаты по идентификатору пользователя.
  7. Шестая строка кода сортирует результаты по имени пользователя.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4 из 5
Похожие ответы