SQLite рассчитать максимальное количество попыток - PullRequest
1 голос
/ 11 февраля 2020

Я пытаюсь выяснить, какое наибольшее количество раз студент отправляет задание. Это работает в некоторых случаях, но, кажется, выбирает только первый идентификатор назначения и рассчитывает количество представлений для этого.

SELECT S.name, MAX(COALESCE((SELECT COUNT(*) FROM Assignments A WHERE A.student_id = S.id GROUP BY A.assignment_id), 0))
FROM Students S LEFT JOIN Assignments A ON S.id = A.student_id GROUP BY S.id;
Students       Submissions
+---+------+   +---+------------+--------------+
|id |name  |   |id |student_id  | assignment_id|
+---+------+   +---+------------+--------------+  
| 1 | Lisa |   | 1 | 1          |      1       |
| 2 | Andy |   | 2 | 1          |      1       |
| 3 | Luke |   | 3 | 2          |      1       |
+---+------+   | 4 | 3          |      3       |
               | 5 | 2          |      1       |
               | 6 | 2          |      2       |
               | 7 | 2          |      1       |
               +---+------------+--------------+

Итак, из этих таблиц я хочу:

+------+-----+
| Lisa |  2  |
| Andy |  3  |
| Luke |  1  | 
+------+-----+

Ответы [ 2 ]

2 голосов
/ 11 февраля 2020

Возможно, что-то вроде этого:

SELECT S.name, Max(A.Cnt) as Cnt
FROM Students S LEFT JOIN 
(Select student_id,Assignment_id,count(*) as Cnt 
from Assignments Group by student_id,Assignment_id
)A ON S.id = A.student_id 
GROUP BY S.name;

В подзапросе мы рассчитываем количество попыток для каждого задания для студента, а затем сопоставляем его с таблицей «Студенты». Наконец, мы получаем максимальное значение cnt, группируя на уровне ученика. Надеюсь, это поможет.

2 голосов
/ 11 февраля 2020

Присоедините Students к запросу, использующему оконную функцию MAX(), чтобы получить максимальное количество попыток для каждого учащегося:

select distinct s.name, t.counter
from Students s inner join (
  select student_id, max(count(*)) over (partition by student_id) counter
  from Submissions
  group by student_id, assignment_id
) t on t.student_id = s.id

См. Демоверсию . Результаты:

| name | counter |
| ---- | ------- |
| Lisa | 2       |
| Andy | 3       |
| Luke | 1       |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...