在sql語句中,先執行哪一個子句,having還是select,一直以來是一個備受爭議的話題。
針對這個問題,傳統的觀點認為SQL會先執行having子句,再執行select子句。然而,有人提出疑問,這違背了SQL的邏輯。因為having子句依賴于select子句的結果,即分組后的匯總數據來進行篩選。那么,如果沒有select子句先查詢出數據來,having子句又如何進行篩選呢?
為了澄清這個疑問,我們重新審視select子句的作用。select子句并不是對數據進行操作,而是將選取的數據展示出來。它不參與數據處理和篩選的過程,因此不會影響having子句的執行。
因此,SQL執行的正確順序應該是:
- Group by先進行分組。
- Sum()聚合函數計算每個組的總和。
- Having子句對子組總和結果進行篩選。
- Select將符合篩選條件的結果選擇性地展示出來。
所以,網上的答案是正確的,SQL中先執行having子句,再執行select子句。這并不矛盾,因為having子句并不依賴于select子句的執行結果來進行篩選。