我正在使用PostgreSQL
,我遇到以下情况:
Sales
表(简短版):
itemid quantity
5 10
5 12
6 1
stock
表(简短版):
itemid stock
5 30
6 1
我有一个复杂的查询,还需要在其中一个列中显示每个SUM
的{{1}}。
所以它会是:
itemid
此查询没问题。但是这个查询会出现:
Select other things,itemid,stock, SUM (quantity) OVER (PARTITION BY itemid) AS total_sales
from .....
sales
stock
但我不需要看itemid stock total_sales
5 30 22
6 1 1
,因为整个股票都被卖掉了。这意味着我需要一个itemid=6
条件,如:
WHERE
但由于在WHERE total_sales<stock
完成后创建了total_sales
,我无法做到这一点。
有没有办法解决这个问题而不用另一个查询包围整个查询?如果可以的话,我试图避免它。
答案 0 :(得分:2)
您可以使用子查询或CTE:
select s.*
from (Select other things,itemid,stock,
SUM(quantity) OVER (PARTITION BY itemid) AS total_sales
from .....
) s
where total_sales < stock;
您不能在SELECT
,SELECT
或WHERE
条款中使用FROM
中定义的表别名来SELECT
。但是,子查询或CTE会绕过此限制。
答案 1 :(得分:0)
您还可以在WHERE
语句中使用内部选择,如下所示:
SELECT *, SUM (quantity) OVER (PARTITION BY itemid) AS total_sales
FROM t
WHERE quantity <> (SELECT SUM(quantity) FROM t ti WHERE t.itemid = ti.itemid);