如何在PostgreSQL的查询中包含查询的下一个结果?

时间:2011-09-11 22:32:02

标签: sql postgresql sql-order-by

假设您有一个学生表:

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

您将如何编写Postgres SQL查询:

  1. 按升序排列学生
  2. 计算已经过 next 级别的学生百分比
  3. 所以,在这种情况下:

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

    在Postgres 8.3中工作。

    感谢。

1 个答案:

答案 0 :(得分: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),代码会更加简单。