group by關鍵字


group by
作用 用於給數據分組
為什么要分組? 思考生活為什么要分組
1.在生活中是為了方便管理
2.在數據庫中是為了 方便統計

准備數據
create table emp (id int,name char(10),sex char,dept char(10),job char(10),salary double);
insert into emp values (1,"劉備","男","市場","總監",5800),
(2,"張飛","男","市場","員工",3000),
(3,"關羽","男","市場","員工",4000),
(4,"孫權","男","行政","總監",6000),
(5,"周瑜","男","行政","員工",5000),
(6,"小喬","女","行政","員工",4000),
(7,"曹操","男","財務","總監",10000),
(8,"司馬懿","男","財務","員工",6000);

按照部門給數據分組
select *from emp group by dept;
有兩種情況
1.sql_mode中 沒有設置 ONLY_FULL_GROUP_BY 顯示每個組的第一條記錄 沒有意義 所以新版中 自帶ONLY_FULL_GROUP_BY
2.sql_mode中有設置 ONLY_FULL_GROUP_BY 直接報錯
原因是: * 表示所有字段都要顯示 但是 分組后 記錄的細節被隱藏 只留下了
這意味着:只有出現在group by 后面的字段才能被顯示
分組是為了統計分組數據 如何統計?
需要使用到聚合函數


聚合函數:
將一堆數據經過計算,得到一個數據
sum() 求和
avg() 求平均數
max()/min() 求最大值 / 最小值
count() 個數


2.查詢每個部⻔門有⼏幾個⼈人
select dept,count(*) from emp group by dept;

3.計算每個部⻔門的平均⼯工資
select avg(salary) from emp group by dept;

總結 什么時候需要使用分組 只要你的需求中 帶有 每個這樣的字眼 就需要分組
每個崗位 每個部門 每個性別

5.查詢平均⼯工資⼤大於5000的部⻔
select avg(salary) from emp where avg(salary) > 5000 group by dept;
where 語句后面 不能使用聚合函數
select avg(salary) from emp;

總結where 條件不能用於篩選分組后的數據


group_concat 用於分組后 將組中的某些字段拼接成字符串
select dept,group_concat(name) from emp group by dept;

其實 沒啥意義 為啥? 你為什么要分組?是為了統計數據 如果你不需要統計 就沒有必要分組


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM