假设我是作为聚合函数的查询编写的,其中我想要基于表列和聚合函数的某些条件的结果。因此,是否可以使用WHERE和WHERE子句来获得预期的结果而不逐个子句。
我为上述条件编写了以下查询。
select *
from ORDER_DETAILS
where item_price > 1000
having count(item) >= 5 ;发布于 2022-09-16 07:24:39
首先,having和where一样,但是可以应用于聚合函数结果。
您应该在每个子句之后跟踪数据、、行、和列。
如果我们命名一个row_id属性,该属性可用于定位表的一行。那么where子句不会更改row_id。
当我们使用聚合函数时,它意味着输入多行并得到一个结果,这就改变了row_id.In事实-- no group by子句--意味着所有事情都会转到一个桶中,而输出结果只有一行。
我最好的猜测是,您希望获得原始数据行,这些数据行具有传递聚合值的属性,check.Eg找到了项price>1000(原始筛选器)的订单细节,以及多个单顺序项(聚合筛选器)。
因此,group + aggregate + having为您提供聚合筛选数据集,您可以将此数据集返回原始表,然后结果表具有与原始ORDER_DETAILS相同的row_id。
select *
from ORDER_DETAILS
where item_price > 1000
and order_id in (
select order_id
from ORDER_DETAILS
group by order_id
having count(item) >= 5
);注:
window函数获取原始表的每一行的聚合结果。https://stackoverflow.com/questions/73740895
复制相似问题