2011-09-11 106 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 

但是,這是不是一個漂亮的代碼。

我建議你創建一個表級(level int,next_level int),代碼會更簡單。

+0

可以使用PostgreSQL的最新版本(> = 8.4)輕鬆計算信息('level,next_level') –

相關問題