Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Zapytanie MySQL - uzyskiwanie brakujących rekordów podczas korzystania z grupowania

SQL jest dobry w pracy z zestawami wartości danych w bazie danych, ale nie tak dobry w zestawach wartości danych, które nie w bazie danych.

Najlepszym obejściem tego problemu jest zachowanie jednej małej tabeli dla wartości, których zakres należy przekroczyć:

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

Biorąc pod uwagę Twój komentarz, że definiujesz maksymalne oceny testu w innej tabeli, możesz dołączyć do tej tabeli w następujący sposób, o ile ScoreValues na pewno ma wartości co najmniej tak wysokie lub wyższe niż maksymalne oceny największego testu:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. sumowanie aktywnych rekordów w codeigniter

  2. Scalanie wielu wierszy w jeden wiersz i wiele kolumn w mysql

  3. Jak zmienić sekundy na wartość czasu w MySQL?

  4. Emotikony iPhone'a wstawiają się do MySQL, ale stają się pustą wartością

  5. MYSQL Left Dołącz do ostatniego wiersza wyniku