sql >> Base de Datos >  >> RDS >> Mysql

MySQL Query:obtener registros faltantes al usar group-by

SQL es bueno para trabajar con conjuntos de valores de datos en la base de datos, pero no tan bueno con conjuntos de valores de datos que no en la base de datos.

La mejor solución es mantener una tabla pequeña para los valores que necesita variar:

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

Dado su comentario de que define las calificaciones máximas de una prueba en otra tabla, puede unirse a esa tabla de la siguiente manera, siempre que ScoreValues es seguro que tiene valores al menos tan altos o más altos que las marcas máximas de la prueba más alta:

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;