2011-09-11 14 views
0

あなたが学生テーブルがあるとします。PostgreSQLのクエリにクエリの次の結果を組み込む方法は?

UID Grade Level 
------------------ 
1  Pass  21 
2  Fail  25 
3  Pass  23 
4  Fail  22 
5  Pass  25 

あなたはPostgresのSQLクエリ書くでしょうどのように:

  1. がで生徒の割合を計算レベル
  2. を昇順に学生を受注しますレベルが合格しました

ので、この場合には:

Level % Passed at next level 
------------------------------------- 
    21    0% 
    22   100% 
    23   50% 
    25    - 

はPostgresの8.3での作業します。

ありがとうございました。

+0

レベルごとに複数の学生がいますか? – Dave

答えて

1

これは動作するはずです:

SELECT * 
    FROM 
(
     SELECT (SELECT max(level) FROM students "inner" WHERE "inner".level < "outer".level) as Level 
      , sum(Case When grade = 'Pass' Then 1.0 Else 0.0 End)/count(*)    as Percentage 
     FROM students "outer" 
    GROUP BY level 
    union all 
     SELECT max(level) as Level 
      , null  as Percentage 
     FROM students 
) mylevels 
WHERE level is not null 

しかし、これはかなりのコードではありません。

テーブルレベル(レベルint、next_level int)を作成することをお勧めします。コードははるかに単純です。

+0

情報( 'level、next_level')はPostgreSQLの最近のバージョン(> = 8.4)で簡単に計算できます –

関連する問題