SQL-HAVING子句的深度
我试图理解having子句后面可以放置什么条件——它通常是一个条件,使用select语句中的函数,但它也可以包含一个列,在select语句中键入 下面是一个例子:SQL-HAVING子句的深度,sql,having-clause,Sql,Having Clause,我试图理解having子句后面可以放置什么条件——它通常是一个条件,使用select语句中的函数,但它也可以包含一个列,在select语句中键入 下面是一个例子: create table r(a int, b int, c int, d int, e int primary key) select a, min(b), sum(c) from r where b > 5 group by a having "condition" 以下哪项可以替代“条件” 当我在SQL中执行此操作时,
create table r(a int, b int, c int, d int, e int primary key)
select a, min(b), sum(c)
from r
where b > 5
group by a
having "condition"
以下哪项可以替代“条件”
当我在SQL中执行此操作时,只有a)不起作用,但它背后的逻辑是什么?这将是正确的
create table r(a int, b int, c int, d int, e int primary key)
select a, min(b), sum(c)
from r
where b > 5
group by a
having "min(b) >= 6"
HAVING
子句作为过滤器应用于groupby
之后
如果你牢记这一点,那么很明显:
b=5
失败,因为您没有在查询中按b进行分组,并且b
按原样使用,而不是在聚合函数中使用
a=SUM(e)
成功,因为您将按a
分组,并将a
与聚合函数进行比较
MIN(b)>=6
成功,因为您将聚合函数与常数进行比较
希望这能澄清…HAVING子句用于聚合函数条件。@Nithin,不是无处不在。HAVING子句被添加到SQL中,因为WHERE关键字不能用于聚合函数。参考因此案例a将不起作用,因为它不是聚合函数。使用过滤器来消除聚合组的结果,表达式
b=5
无效,因为b
未聚合或分组。好的,它认为现在更清楚了-例如,a=2起作用,因为我们是按a分组的
create table r(a int, b int, c int, d int, e int primary key)
select a, min(b), sum(c)
from r
where b > 5
group by a
having "min(b) >= 6"