Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL-Abfrage - Fehlende Datensätze erhalten, wenn Group-By verwendet wird

SQL kann gut mit Sätzen von Datenwerten in der Datenbank arbeiten, aber nicht so gut mit Sätzen von Datenwerten, die nicht sind in der Datenbank.

Die beste Problemumgehung besteht darin, eine kleine Tabelle für die Werte zu führen, die Sie überschreiten müssen:

CREATE TABLE ScoreValues (score int);
INSERT INTO ScoreValues (score) 
  VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9), (10);

Angesichts Ihres Kommentars, dass Sie die Höchstnoten eines Tests in einer anderen Tabelle definieren, können Sie dieser Tabelle auf folgende Weise beitreten, solange ScoreValues ist sicher, Werte zu haben, die mindestens so hoch oder höher sind als die Höchstnoten des besten Tests:

SELECT v.score, COUNT(tr.score) AS 'NumStudents'
FROM ScoreValues v 
  JOIN Tests t ON (v.score <= t.maxmarks)
  LEFT OUTER JOIN TestResults tr ON (v.score = tr.score AND t.testid = tr.testid)
WHERE t.testid = 'mytestid'
GROUP BY v.score;