Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL Query - obtendo registros ausentes ao usar group-by


SQL é bom em trabalhar com conjuntos de valores de dados no banco de dados, mas não tão bom em conjuntos de valores de dados que não no banco de dados.

A melhor solução é manter uma pequena tabela para os valores que você precisa variar:
CREATE TABLE ScoreValues (score int);
INSERT INTO ScoreValues (score) 
  VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9), (10);

Dado seu comentário de que você define as marcas máximas de um teste em outra tabela, você pode ingressar nessa tabela da seguinte maneira, desde que ScoreValues tem certeza de ter valores pelo menos tão altos ou mais altos que as notas máximas do maior teste:
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;