原創聲明:本文為作者原創,未經允許不得轉載,經授權轉載需注明作者和出處
修改一下數據庫中的age:
現在的需求是,統計一下每個年齡的數據各有多少個:
SELECT COUNT(id) '人數', age '年齡' FROM person GROUP BY age;
對沒錯,在mysql中,通過GROUP BY 對某個字段或者多個字段進行分組查詢。
上面是分組統計,那么能否用分組查詢數據呢:
SELECT * FROM person GROUP BY age;
很遺憾,上面這句是錯的,
它報了這么個錯:
Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'mysqltest.person.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
說了這么一大堆,其實意思就是說要查詢的字段不包含在被分組的字段中,換句話說,也就是要查詢的字段必須從后面GROPU BY 中來選擇,所以如果這句話改成這樣就對了:
SELECT age FROM person GROUP BY age;
分組也是可以根據多個字段分組的,比如:
SELECT age FROM person GROUP BY age, name;
那么,既然分組的字段有個name,那就應該是可以查詢name的:
SELECT age, name FROM person GROUP BY age, name;
當然,這個結果可能有些看不懂,修改一下數據庫試試:
這次再運行,并且調換一下GRUOP BY 后面字段的順序:
可以發現,如果是age在前面就主要以age來進行分組,然在此基礎上再以name為基礎再繼續分組,如果是name在前面就主要以name來進行分組,然在此基礎上再以age為基礎再繼續分組,
因此GROUP BY 的分組優先級也是從前往后的,至于為什么’三妖怪’,每次都只顯示一條,是因為三條的age和name是一樣的,他們算是一組,所以只顯示一條。
說下我個人見解,我認為GROUP BY 大部分情況下用用來統計數據比較多,至于這個查詢,我是沒研究出有什么實際用途,知道的可以留言討論。