SELECT student_id, section, count(*) as total
FROM raw_data r
WHERE response = 1
GROUP BY student_id, section
W teście są 4 sekcje, każda z inną liczbą pytań. Chcę wiedzieć, dla każdego ucznia i każdej sekcji, ile pytań odpowiedzieli poprawnie (odpowiedź = 1).mysql WYBIERZ LICZBĘ (*) ... GRUPA BY ... nie zwraca wierszy, gdy liczba wynosi zero
Jednak w przypadku tego zapytania, jeśli uczeń nie otrzyma żadnych pytań w danej sekcji, ten wiersz zostanie całkowicie pominięty w moim zestawie wyników. Jak mogę się upewnić, że dla każdego ucznia zwracane są ZAWSZE 4 wiersze, nawet jeśli "ogółem" dla wiersza jest 0?
Oto co mój zestaw wyników wygląda następująco:
student_id section total
1 DAP--29 3
1 MEA--16 2
1 NNR--13 1 --> missing the 4th section for student #1
2 DAP--29 1
2 MEA--16 4
2 NNR--13 2 --> missing the 4th section for student #2
3 DAP--29 2
3 MEA--16 3
3 NNR--13 3 --> missing the 4th section for student #3
4 DAP--29 5
4 DAP--30 1
4 MEA--16 1
4 NNR--13 2 --> here, all 4 sections show up because student 4 got at least one question right in each section
dzięki za wgląd!
UPDATE: Próbowałem
SELECT student_id, section, if(count(*) is null, 0, count(*)) as total
i że nie zmieni wyników w ogóle. Inne pomysły?
UPDATE 2: Mam to działa dzięki poniższej reakcji:
SELECT student_id, section, SUM(CASE WHEN response = '1' THEN 1 ELSE 0 END) AS total
FROM raw_data r
WHERE response = 1
GROUP BY student_id, section
Musisz pokazać, jak wygląda wejście. –