我是 SQL 新手,我有以下查询:
-- Ref 1
SELECT *,
Max(Watts) OVER (PARTITION BY Freq) as MyMax,
log10(SUM(MyMax) OVER SumFunct * 1000) * 10 AS MySum
FROM MyTable
WINDOW SumFunct as (PARTITION BY temp, Freq, channel);
这不起作用,因为no such column: MyMax
. 尽管根据我的理解,for 列MyMax
是动态创建的,但我猜 SQL 仍然无法立即使用它的值作为下一个窗口函数的输入
我已经尝试为 MaxPower 创建列并在上面的查询之前填充它,通过
-- Ref 2
ALTER TABLE MyTable ADD COLUMN MyMax real;
UPDATE MyTable SET MyMax = sub.MyMax
FROM (
SELECT *, Max(Watts) OVER (PARTITION BY Freq) AS MyMax
) sub;
但我不知道如何在语句中设置MyMax
窗口函数。UPDATE
我的尝试是创建一个子查询,但我觉得我把问题复杂化了,而且由于SELECT
我无法隔离的一些语法,我也没有得到这个工作。
我要做的就是MyMax
使用上面的窗口函数进行查询,并将其通过管道传递到一个新的窗口函数中。结果:两个额外的列包含我需要的数据。我对窗口函数的理解是,它们会即时创建您想要的列,但即使我将顶部查询(参考 1)分成两个不同的调用:
-- Ref3
SELECT *,
Max(Watts) OVER (PARTITION BY Freq) as MyMax,
FROM MyTable;
SELECT *,
log10(SUM(MyMax) OVER SumFunct * 1000) * 10 AS MySum
FROM MyTable
WINDOW SumFunct as (PARTITION BY temp, Freq, channel);
它仍然无法识别是什么MyMax
。有没有人对如何解决这个问题有任何指导?
不允许嵌套窗口函数。
您需要一个返回的子查询和一个返回MyMax
的主查询MySum
:
SELECT *, log10(SUM(MyMax) OVER SumFunct * 1000) * 10 AS MySum
FROM (
SELECT *, Max(Watts) OVER (PARTITION BY Freq) AS MyMax
FROM MyTable
)
WINDOW SumFunct as (PARTITION BY temp, Freq, channel);
或者,CTE:
WITH cte AS (
SELECT *, Max(Watts) OVER (PARTITION BY Freq) as MyMax
FROM MyTable
)
SELECT *, log10(SUM(MyMax) OVER SumFunct * 1000) * 10 AS MySum
FROM cte
WINDOW SumFunct as (PARTITION BY temp, Freq, channel);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句