1.group by概述:
簡單的來說: 將數據庫的數據用'by'后面接的規則進行分組,即將一個大數據庫分成一個個相同類型數據在一起的小區域。
2.group by的語法:
select column_name,function(column_name) //此處的function()函數是指SQL中的一些聚合函數,例如: MAX(),MIN(),SUM(),AVG(),COUNT()等
from table_name where column_name operator value //where條件語句
group by column_name;//以某一列分組
3.group by實例操作:
原表: 在此處就叫做call_task表吧
group by正確的進入方法:
select is_pause,pause_type,count(stu_id) from call_task where is_pause='1' group by is_pause,pause_type
語句整個的意思就是從call_task這個表中,先篩選出滿足is_pause='1'這個條件的所有數據,然后又對這些數據按照is_pause和pause_type這兩個字段分組,最后將is_pause、pause_type和學生總人數展示在結果集中。
上面語句執行后結果如下圖展示:
group by錯誤打開方式:
select is_pause,user_id,pause_type,count(stu_id) from call_task where is_pause='1' group by is_pause,pause_type //在分組中並沒有user_id這個字段
我們先看結果再來分析原因:
大家可以對比原數據庫數據,很快會發現雖然pause_type和學生總數這兩欄數據沒有問題,但是user_id那一欄明顯不對。為什么會出現這種情況? ? ?因為我們在分組的時候只把is_pause和pause_type這兩個字段當做分組條件,所以SQL只會對原數據庫中的這兩列的數據進行分組操作,其他列並不會參與到這個分組過程中(注意! ! !),但是顯示結果集時你非要讓它顯示沒有進行分組的列,當然數據庫就會出現錯誤啦。其實數據庫在這里也是很糾結的,因為user_id存在多個情況,它也不知道要顯示哪個user_id,最后它采取的方式是選取滿足where和分組條件出現的第一組數據的user_id。
4.group by和select的一些總結:
如果在有group by操作中,select后面接的結果集字段只有兩種: 要么就只有group by后出現的字段,要么就是group by后出現的字段 + 聚合函數的組合(常用的五種聚合函數: min()求列中最小數值 , max()求列中最大數值 , avg()求平均值 , sum()求列中字段對應數值的總和 , count()求列的總條數 )
文章來源: https://blog.csdn.net/Liting_Peng/article/details/80887706