繁体   English   中英

SQL 中没有 GROUP BY 子句的 WHERE 和 HAVING 子句是否可行?

[英]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
);

笔记:

  • order_id 是聚合过滤列示例
  • 为了方便,我in subquery中使用,您可以将其更改为join
  • 如果您正在使用大数据 sql,如 hive/spark,您还可以使用window函数来获取原始表每一行的聚合结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM