Mysql
 sql >> Base de données >  >> RDS >> Mysql

Requête MySQL - obtenir des enregistrements manquants lors de l'utilisation de group-by

SQL fonctionne bien avec des ensembles de valeurs de données dans la base de données, mais pas si bien avec des ensembles de valeurs de données qui ne le sont pas dans la base de données.

La meilleure solution consiste à conserver un petit tableau pour les valeurs dont vous avez besoin :

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

Étant donné votre commentaire selon lequel vous définissez les notes maximales d'un test dans une autre table, vous pouvez vous joindre à cette table de la manière suivante, tant que ScoreValues est sûr d'avoir des valeurs au moins aussi élevées ou supérieures aux notes maximales du plus grand test :

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;