1. 程式人生 > >轉:mysql where group by having

轉:mysql where group by having

sdn HERE mys targe 處理 bsp 條件 我們 https

原文地址:https://blog.csdn.net/tengdazhang770960436/article/details/6992272

1.where為什麽要寫在group by之前呢?

因為group by只能夠對結果集進行處理,假如說我們可以先分組後對分組之後的結果集進行在where條件下的篩選的話在查詢相當於對有些沒有必要分組的數據集也進行了分組了,數據小還好的,如果數據量巨大的話,那麽這個多余的操作將會消耗大量的內存,而實際上多余的操作是沒有必要的。

2.having使用的時機

where 子句的作用是在對查詢結果進行分組前,將不符合where條件的行去掉,即在分組之前過濾數據,條件中不能包含聚組函數,使用where條件顯示特定的行。

having 子句的作用是篩選滿足條件的組,即在分組之後過濾數據,條件中經常包含聚組函數,使用having 條件顯示特定的組,也可以使用多個分組標準進行分組。

having 子句被限制子已經在SELECT語句中定義的列和聚合表達式上,這句話的意思參考下面案例(註 案例根據自己測試情況寫的,不一定正確),

正確:

select cno,degree from score group by cno having degree >85; 如果 having 後直接使用字段,則字段必須出現在 select 後面

select cno from score group by cno having avg(degree) >85; 如果 having 後使用聚合函數,則聚合函數中的字段不必出現在 select 後面

錯誤:

select cno from score group by cno having degree >85; 此例中 having 後使用的 degree 未出現在 select 後面,會報錯。

轉:mysql where group by having