gpt4 book ai didi

sql - 选择一列上的最大运行总计小于给定值的行

转载 作者:行者123 更新时间:2023-11-29 12:13:07 25 4
gpt4 key购买 nike

例如,对于一个表,例如:

ID | col_a  | col_b  | col_c
=============================
1 |5.0 |7.0 |3
2 |3.0 |6.8 |5

我需要找到 col_a/col_b 的值,其中 col_c 的运行总计小于给定值。

到目前为止我有:

select MAX(running_total) as max FROM (select (col_a / col_b) as val, SUM(col_c)
OVER (ORDER BY value ROWS UNBOUNDED PRECEDING) as running_total FROM tableName)
WHERE running_total < 50;

这为我提供了最大运行总计,但我还需要达到此 running_total 的行的 val (col_a/col_b)。

我正在使用 Amazon Redshift 进行此查询,这与 mysql 不同,它不允许我将 val 放在外部 select 语句中,而无需在 val 上添加 group by 子句。我无法添加 group by 子句,因为这会改变查询的整个语义。

我已经找到类似问题的解决方案 - Fetch the row which has the Max value for a column

大多数这些解决方案建议,我们连接同一个表,然后匹配列的值,但是计算了 running_total 列并对其进行连接,我必须再次计算它吗?这听起来相当昂贵。

最佳答案

你可以做到这一点。窗口函数来拯救。

只需添加另一层子查询来计算每行的最大运行总计。然后使用 where 子句获取它们匹配的行:

select t.*
from (select t.*,
max(running_total) over () as maxrt
FROM (select (col_a / col_b) as val,
SUM(col_c) OVER (ORDER BY value ROWS UNBOUNDED PRECEDING
) as running_total
FROM tableName
) t
WHERE running_total < 50
) t
where running_total = maxrt;

关于sql - 选择一列上的最大运行总计小于给定值的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20648548/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com