sql >> データベース >  >> RDS >> Mysql

MySQLクエリ-group-byを使用すると欠落しているレコードを取得する

    SQLは、データベース内のデータ値のセットの操作には優れていますが、ではないデータ値のセットにはあまり適していません。 データベース内。

    最善の回避策は、範囲を広げる必要のある値に対して1つの小さなテーブルを保持することです。

    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. Mysqlエラー1241(21000):オペランドには1つの列が含まれている必要があります

    2. T-SQLのバグ、落とし穴、およびベストプラクティス–ウィンドウ関数

    3. JSON関数がSQLiteでデフォルトで有効になりました

    4. MySQLのデフォルト値の問題