Как включить следующий результат запроса в запрос в PostgreSQL? - PullRequest
0 голосов
/ 12 сентября 2011

Предположим, у вас есть таблица студентов :

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

Как написать SQL-запрос Postgres, который:

  1. Упорядочивает студентов по возрастанию
  2. Рассчитывает процент студентов на уровне следующий , которые прошли

Итак, в данном случае:

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

Работа в Postgres 8.3.

Спасибо.

1 Ответ

1 голос
/ 24 сентября 2011

Это должно работать:

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), код будет намногоболее просто.

...