sql >> Databasteknik >  >> RDS >> Mysql

MySQL Query - får saknade poster när du använder group-by

SQL är bra på att arbeta med uppsättningar datavärden i databasen, men inte så bra på uppsättningar datavärden som inte är i databasen.

Den bästa lösningen är att ha en liten tabell för de värden du behöver för att variera:

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

Med tanke på din kommentar om att du definierar maxpoängen för ett test i en annan tabell, kan du gå med i den tabellen på följande sätt, så länge som ScoreValues är säker på att ha värden som är minst lika höga eller högre än det högsta testets maxbetyg:

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;


  1. Mysql-utlösare för att uppdatera den infogade raden

  2. mysql lagrad procedurfel (1172, 'Resultat bestod av mer än en rad')

  3. Hur använder jag uttrycksbyggaren i Access 2016?

  4. InnoDB tar över en timme att importera 600MB fil, MyISAM på några minuter