假设您有一个学生表:
UID Grade Level
------------------
1 Pass 21
2 Fail 25
3 Pass 23
4 Fail 22
5 Pass 25
您将如何编写Postgres SQL查询:
所以,在这种情况下:
Level % Passed at next level
-------------------------------------
21 0%
22 100%
23 50%
25 -
在Postgres 8.3中工作。
感谢。
答案 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),代码会更加简单。