利用Mysql中的 的聚合函數 count(*) 可以實現這個功能,例如需要查詢data表中name出現次數最多的記錄,可以先按照group by name分組,用count算出分組裡的條數,再按照count排序:
代碼如下 復制代碼select name,count(*) from data group by name order by count(*) DESC limit 1
不加limit限制將返回按照name重復次數排列的數據
在使用聚合函數之前,我們可以通過where對查詢加限制條件,那麼如果在group by之後我們要對分組裡面的數據再加限制條件怎麼辦呢?答案是having。
HAVING子句可以讓我們篩選成組後的各組數據.
WHERE子句在聚合前先篩選記錄.也就是說作用在GROUP BY 子句和HAVING子句前.
而 HAVING子句在聚合後對組記錄進行篩選。
having子句出現的數據必須在group by 之後,order by 之後
例如在上一篇中對name按照出現次數排序之後,我們還想只查出名字裡面含有lin的數據,可以這樣寫:
代碼如下 復制代碼select name ,count(*) from data group by name having name like '%lin%' order by couny(*) DESC