Wer*_*ght 47 sql postgresql subquery
例:
SELECT
(SELECT SUM(...) FROM ...) as turnover,
(SELECT SUM(...) FROM ...) as cost,
turnover - cost as profit
Run Code Online (Sandbox Code Playgroud)
当然这是无效的(至少在Postgres中)但如何在查询中实现相同而不重写子查询两次?
Den*_*rdy 42
像这样:
SELECT
turnover,
cost,
turnover - cost as profit
from (
(SELECT SUM(...) FROM ...) as turnover,
(SELECT SUM(...) FROM ...) as cost
) as partial_sums
Run Code Online (Sandbox Code Playgroud)
小智 12
您可以像这样重用查询:
WITH
TURNOVER AS (
SELECT SUM(...) FROM ...)
),
COST AS(
SELECT SUM(...) FROM ...
)
SELECT *
FROM(
SELECT
TURNOVER.sum as SUM_TURNOVER
FROM
TURNOVER,COST
WHERE ....
) AS a
Run Code Online (Sandbox Code Playgroud)
这相当于:
SELECT *
FROM(
SELECT
TURNOVER.sum as SUM_TURNOVER
FROM
(
SELECT SUM(...) FROM ...)
)AS TURNOVER,
(
SELECT SUM(...) FROM ...
)AS COST
WHERE ....
) AS a
Run Code Online (Sandbox Code Playgroud)
这里有一点需要注意.第一种方法更具可读性和可重用性,但第二种方法可能更快,因为数据库可能会为它选择更好的计划.
也许sql"with"子句可以提供帮助,如http://orafaq.com/node/1879所示(其他数据库如Postgres也可以这样做,而不仅仅是oracle).
SELECT turnover, cost, turnover - cost
FROM
(
SELECT
(SELECT ...) as turnover,
(SELECT ...) as cost
) as Temp
Run Code Online (Sandbox Code Playgroud)