groupby和having在什麼狀況下使用mysql
使用時須要注意什麼sql
demo :原始表函數
結果表:根據每位user的rate的平均值更新rate, rate = rate - avg(rate)大數據
CREATE table userRate( id int(2) NOT null auto_increment, user int(2) not null DEFAULT 0, rate int(2) not null DEFAULT 0, PRIMARY KEY(id) )
INSERT into userRate(user,rate) VALUES(1,1),(1,3),(1,2),(2,4),(2,4),(2,5),(2,3);
update userRate JOIN (SELECT id,USER,AVG(rate) AS avr from userRate GROUP BY user HAVING user= userRate.user) n on n.user = userRate.user set userRate.rate= userRate.rate- n.avr
分析step3 執行順序 step3.1 執行查詢操做userRate(隱藏了查詢,要否則後面的userRate.user得不到數據), SELECT id,USER,AVG(rate) AS avr from userRate(不是我想黑別人,有些文章寫說這條語句是錯誤的,由於用到了聚合函數,還有其餘字段,其餘字段必須在groupby 後面出現,實質上mysql並沒報錯,可是他只顯示第一條語句)
step3.2 執行groupby 分組查詢 GROUP BY user 根據用戶名分組查詢
網站
step3.3 條件判斷having來了 having user= userRate.usercode
step3.4 join on的組合(下次講解)索引
step3.5 update set 語法圖片
何時用到group by ,根據字面意思就是分組,好比:某個用戶訪問哪一個網站多少次(sum)統計,某位同窗成績的平均值,having 作個條件判斷過濾不要的信息,開發
之後繼續爲你們帶來mysql實戰系列,爲大數據開發打下基礎,最後提醒你們,但願你們本身敲sql語句,查看結果,分析錯誤,那就是真正屬於你的知識結構。rem
QQ交流羣: 181666459