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

同じクエリのcount()の平均

    これは実行しているクエリであり、少しわかりにくい構文で記述されています。

    SELECT
      avg(a.ress) as GjSnitt
      , modulID
    FROM
      (SELECT COUNT(ressursID) as ress 
       FROM ressursertiloppgave
       GROUP BY modulID) as a
    CROSS JOIN ressursertiloppgave r    <--- Cross join are very very rare!
    GROUP BY modulID;
    

    テーブルをクロス結合し、合計で(6x6 =)36行を作成し、これを4に凝縮しますが、合計数が36であるため、結果は正しくありません。
    これが、暗黙的な結合を使用しない理由です。

    クエリを次のように書き直します:

    SELECT AVG(a.rcount) FROM 
      (select count(*) as rcount 
       FROM ressursertiloppgave r
       GROUP BY r.ModulID) a
    

    個別の行数が必要な場合はおよび 一番下の平均は:

    SELECT r1.ModulID, count(*) as rcount
    FROM ressursertiloppgave r1
    GROUP BY r1.ModulID 
    UNION ALL 
      SELECT 'avg = ', AVG(a.rcount) FROM 
      (select count(*) as rcount 
       FROM ressursertiloppgave r2
       GROUP BY r2.ModulID) a
    



    1. MySQLからPostgreSQLへの移行

    2. SQLServerの一部のオペレーターの説明

    3. SELECT * FROMのショートカットはありますか?

    4. 集計関数COUNTを使用してレコードをフィルタリングする方法