條款

2011-06-24 48 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允許