PostgreSQL 子查询作为可用变量

jfr*_*k53 5 sql postgresql

我正在尝试使用一个子查询,该子查询稍后会出现在另一个计算中的列中。我怎样才能做到这一点?

SELECT c_id, c_title, c_enrolcap,
(SELECT COUNT(e_id) AS enrol FROM enrollments WHERE e_c_id = c_id) AS enrolled,
c_enrolcap - enrolled AS avail,
FROM classes AS c
Run Code Online (Sandbox Code Playgroud)

所以基本上enrolled我需要这个作为一个列来计算以后的结果,也作为它自己的列。

Eri*_*ein 8

我通常使用通用表表达式来做到这一点。

http://www.postgresql.org/docs/9.3/static/queries-with.html

执行c_enrolcap - enrolled as avail外部查询。

喜欢:

WITH enrollment AS (
SELECT c_id, c_title, c_enrolcap,
(SELECT COUNT(e_id) AS enrol FROM enrollments WHERE e_c_id = c_id) AS enrolled

FROM classes AS c)
SELECT c_id, c_title, c_enrolcap, enrolled, c_enrolcap - enrolled AS avail
FROM enrollment
Run Code Online (Sandbox Code Playgroud)