Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL Query:ottenere record mancanti quando si utilizza il raggruppamento

SQL è bravo a lavorare con insiemi di valori di dati nel database, ma non così bravo con insiemi di valori di dati che non nel database.

La soluzione migliore consiste nel mantenere una piccola tabella per i valori su cui devi variare:

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

Dato il tuo commento che definisci i voti massimi di un test in un'altra tabella, puoi unirti a quella tabella nel modo seguente, purché ScoreValues ha sicuramente valori almeno pari o superiori ai voti massimi del test più grande:

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;