2013-10-03 52 views
2

我想在稍后的另一个计算中使用出现在列中的子查询。我怎样才能做到这一点?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 

所以基本上什么出来的enrolled我需要这为列计算过以后,也因为它是自己的专栏。

+0

是上面查询预计返回一行或多行? –

+0

多行,确切地说很多行。 – jfreak53

回答

2

我通常用Common Table Expressions来做这件事。

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