条款

2011-06-24 83 views

回答

0

具有聚集功能,例如

SELECT * 
FROM foo 
GROUP BY baz 
HAVING COUNT(*) > 8 
+0

带子句是否用groupby子句检查条件? – Pearl

+0

如果您发布代码,XML或数据样本,**请**在文本编辑器中突出显示这些行,然后单击编辑器工具栏上的“代码样本”按钮(“{}”)以精确地设置格式并对其进行语法突出显示! –

0

Having适用于合计如SumWhere适用于所有其他情况。

+0

从sal> 1000的saltable选择SUM(sal)这不起作用。 它适用于where子句。 – Pearl

+0

你写了'SUM(sal)> 1000' – Magnus

0

它们指定组或聚合的搜索条件。但区别在于HAVING只能用于SELECT语句。 HAVING通常用在GROUP BY子句中。当不使用GROUP BY时,HAVING的行为如同WHERE子句。具有子句基本上只在查询中与GROUP BY函数一起使用,而WHERE子句在查询中属于GROUP BY函数的一部分之前应用于每一行。

2

HAVING过滤器分组元素, WHERE过滤未分组元素。

实施例1:

SELECT col1, col2 FROM table 
WHERE col1 = @id 

实施例2:

SELECT SUM(col1), col2 FROM table 
GROUP BY col2 
HAVING SUM(col1) > 10 

由于HAVING条件只能在第二示例中发生之后分组被应用,则不能重写它作为一个WHERE条款。

例3:

SELECT SUM(col1), col2 FROM table 
WHERE col1 = @id 
GROUP BY col2 
HAVING SUM(col1) > 10 

演示了如何使用这两个WHERE和HAVING在一起:

表数据首先由col1 = @id 过滤,然后将过滤后的数据进行分组 然后分组数据通过SUM(col1) > 10

0

再次过滤如其他已经说过的,与群组一起使用。原因是执行的顺序 - 其中,通过组之前执行,后于它

+0

真的有区别.Thanq – Pearl

1
WHERE filters rows before they are grouped in GROUP BY clause 
while HAVING filters the aggregate values after GROUP BY takes place 
1

HAVING指定在SELECT语句中使用的东西执行搜索。

换句话说。

HAVING适用于组。

WHERE适用于行。

0

把它看作是发生过滤的地方。

当您指定一个where子句时,将输入行过滤到您的聚合函数(即:我只想获得居住在特定城市的人的平均年龄)。当指定having约束时,您指定您只希望平均值的某个子集。 (我只希望看到城市与70年或以上的平均年龄。)

1

如果没有GROUP BY,没有任何区别(但有看起来很奇怪当时)

随着GROUP BY

  • HAVING是用于在聚合试验条件(MAX,SUM,COUNT等)
  • HAVING column = 1相同WHERE column = 1(上column没有聚集体)
  • WHERE COUNT(*) = 1不allowe d。
  • HAVING COUNT(*) = 1允许