Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL Query - получаване на липсващи записи при използване на group-by

SQL е добър в работата с набори от стойности на данни в базата данни, но не е толкова добър в набори от стойности на данни, които не в базата данни.

Най-доброто решение е да запазите една малка таблица за стойностите, над които трябва да обхванете:

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

Като се има предвид коментарът ви, че дефинирате максималните оценки на тест в друга таблица, можете да се присъедините към тази таблица по следния начин, стига ScoreValues със сигурност има стойности поне толкова високи или по-високи от максималните оценки на най-големия тест:

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. Как да създадете таблица в MySQL

  2. Как да разменя стойностите на два реда в MySQL, без да нарушавате уникалното ограничение?

  3. Позоваване на групи в MySQL регулярен израз?

  4. ALTER TABLE за добавяне на съставен първичен ключ

  5. mysql Неуспешно четене на стойността за автоматично увеличение от машината за съхранение