[英]Is WHERE and HAVING clause possible without GROUP BY clause in SQL?
假设我正在编写聚合函数的查询,其中我想要基于表列和聚合 function 的某些条件的结果。 那么是否可以使用 WHERE 和 HAVING 子句在没有 GROUP BY 子句的情况下获得预期结果。
我为上述条件编写了以下查询。
select *
from ORDER_DETAILS
where item_price > 1000
having count(item) >= 5 ;
首先, having
where
一样,但可以应用于聚合 function 结果。
您应该跟踪每个子句之后的数据行和列。
如果我们命名一个row_id
属性,该属性可用于定位表的单行。 然后where
子句不会更改row_id
。
当我们使用聚合函数时,它意味着输入多行并得到一个结果,这会改变row_id
。实际上没有group by
子句意味着所有 go 到一个桶,而 output 结果只有一行。
我最好的猜测是您想要获取原始数据行,这些行具有一些通过聚合值检查的属性。例如,发现商品价格>1000 (原产地过滤器)和单个订单中超过 5 个商品(聚合过滤器)的订单详细信息。
所以group + aggregate + having
给你聚合过滤数据集,你可以把这个数据集join
原始表,然后结果表有相同的row_id
和原始的ORDER_DETAILS
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
);
笔记:
in subquery
中使用,您可以将其更改为join
window
函数来获取原始表每一行的聚合结果。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.