group by 語句是根據表中的某個字段進行分組 ,聚合。mysql
這在開發中很場景sql
這個表裏面的categeryId是產品類別函數
SELECT `catageryId` ,AVG(price) FROM `goods` GROUP BY `catageryId`
這條語句會返回幾條結果 ? (對的,會返回兩條,這條語句按產品類別分組查詢出每一個產品類別的平均價格,有a,b兩中類別全部返回兩條結果)code
group by 語句會掃描原始表的每一行數據 ,根據每一行的 catageryId(group by 字段)對其它字段進行聚合(實現 max(),min(),count(),sum(),avg())開發
好比這裏第一,第二條記錄的catageryId 是 a ,mysql 就把這兩行記錄對應的price(5,4)作平均。產品
聚合函數中的參數 根據實際需求作出改變im
SELECT `catageryId` ,AVG(price+1) FROM `goods` GROUP BY `catageryId`
這裏將price 字段加1後 在聚合,結果就不一樣了數據
實際開發中常常在聚合函數裏面經過case when,if 語句邏輯實現相關功能。查詢
GROUP_CONCAT函數(在存儲過程當中拼接查詢表頭時經常使用)存儲過程
這個函數是在分組後進行拼接 默認所有一個分組,返回一條記錄
SELECT GROUP_CONCAT(goodName) FROM goods
SELECT GROUP_CONCAT(goodName) FROM goods GROUP BY `catageryId`
這個按 catageryId分組後的結果 有兩條記錄