mysql基礎知識理解和sql題講解分析面試實戰(一)之groupBy&&having

mysql 之groupBy&&having 的使用

  • groupby和having在什麼狀況下使用mysql

  • 使用時須要注意什麼sql

groupby和having在什麼狀況下使用

  • 問題 :根據平均值分析表

demo :原始表函數

輸入圖片說明 結果表:根據每位user的rate的平均值更新rate, rate = rate - avg(rate)大數據

輸入圖片說明

實現步驟
  • step 1 建立表 -若你是想作大數據,必定要控制表字段的大小,字段最好不要爲空,爲空會致使索引失敗
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)
)
  • step2 插入數據- 注意插入的時候因id是自增加的,因此不用,可是在表後面需填寫你要插入的字段名
INSERT into userRate(user,rate) VALUES(1,1),(1,3),(1,2),(2,4),(2,4),(2,5),(2,3);
  • step3 執行sql更新查詢
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

相關文章
相關標籤/搜索