23.MySQL中的HAVING(分組過濾)
1.準備
CREATE DATABASE mahaiwuji;USE mahaiwuji;CREATE TABLE student ( sid INT (4) PRIMARY KEY, sname VARCHAR (36), course VARCHAR (36), score INT, grade INT (4)) ENGINE = INNODB DEFAULT CHARSET = utf8;INSERT INTO student VALUES (1,‘aa’,‘語文’,60,1);INSERT INTO student VALUES (2,‘aa’,‘數學’,70,1);INSERT INTO student VALUES (3,‘aa’,‘英語’,80,1);INSERT INTO student VALUES (4,‘bb’,‘語文’,70,1);INSERT INTO student VALUES (5,‘bb’,‘數學’,60,1);INSERT INTO student VALUES (6,‘bb’,‘英語’,60,1);INSERT INTO student VALUES (7,‘cc’,‘語文’,90,2);INSERT INTO student VALUES (8,‘cc’,‘數學’,50,2);INSERT INTO student VALUES (9,‘cc’,‘英語’,60,2);INSERT INTO student VALUES (10,‘dd’,‘語文’,70,2);INSERT INTO student VALUES (11,‘dd’,‘數學’,60,2);INSERT INTO student VALUES (12,‘dd’,‘英語’,90,2);
2.例項演示
功能:
根據條件表示式
對分組後的內容
進行過濾,因此使用having時通常都會先使用group by。
—— 查詢平均分大於68分的人SELECT sname,AVG(score) FROM student GROUP BY sname HAVING AVG(score)>68;
3.HAVING和WHERE的異同
相同
都是對資料過濾,只保留有效的資料。
不同
WHERE是對原始的記錄過濾,HAVING是對分組之後的記錄過濾;WHERE必須的寫在HAVING的前面,順序不可顛倒否則執行出錯。