Wer*_*ght 47 sql postgresql subquery
例:
SELECT
   (SELECT SUM(...) FROM ...) as turnover,
   (SELECT SUM(...) FROM ...) as cost,
   turnover - cost as profit
当然这是无效的(至少在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
小智 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
这相当于:
SELECT *
FROM(
 SELECT
   TURNOVER.sum as SUM_TURNOVER
 FROM
 (
   SELECT SUM(...) FROM ...)
 )AS TURNOVER,
 (
   SELECT SUM(...) FROM ...
 )AS COST
 WHERE ....
) AS a
这里有一点需要注意.第一种方法更具可读性和可重用性,但第二种方法可能更快,因为数据库可能会为它选择更好的计划.
也许sql"with"子句可以提供帮助,如http://orafaq.com/node/1879所示(其他数据库如Postgres也可以这样做,而不仅仅是oracle).
SELECT turnover, cost, turnover - cost
FROM
(
SELECT
(SELECT ...) as turnover,
(SELECT ...) as cost
) as Temp
| 归档时间: | 
 | 
| 查看次数: | 82229 次 | 
| 最近记录: |