Mysql常用sql語句(12)- group by 分組查詢


測試必備的Mysql常用sql語句系列

https://www.cnblogs.com/poloyy/category/1683347.html

 

前言

  • group by 關鍵字可以根據一個或多個字段對查詢結果進行分組
  • group by 一般都會結合Mysql聚合函數來使用
  • 如果需要指定條件來過濾分組后的結果集,需要結合 having 關鍵字;原因:where不能與聚合函數聯合使用 並且 where 是在 group by 之前執行的

 

group by 的語法格式

GROUP BY  <字段名>[,<字段名>,<字段名>]

 

確認測試表里有什么數據,方便后面的栗子做對比

 

group by 單字段分組的栗子

對sex單個字段進行分組查詢

select * from yyTest group by sex;

知識點

分組之后,只會返回組內第一條數據;具體原理可以看看下圖

 

group by 多字段分組的栗子

先按照age進行分組,然后再在每個組內按department分組

select * from yyTest group by age,department;

知識點

  • 多個字段分組查詢時,先按照第一個字段分組,如果第一個字段有相同值,則把分組結果再按第二個字段進行分組,以此類推
  • 如果第一個字段每個值都是唯一的,則不會按照第二個字段再進行分組了,具體原理可看下圖

 

group by + group_concat()的栗子

group_concat()可以將分組后每個組內的值都顯示出來

select department,group_concat(username) as "部門員工名字" from yyTest group by department;

可以看到,按department部門分組 ,然后查看每個部門都有哪些員工的名字;還是很便捷的

 

group by +聚合函數的栗子

有什么聚合函數?

  • count():統計記錄的條數
  • sum():字段值的總和
  • max():字段值的最大值
  • min():字段值的最小值
  • avg():字段值的平均值

 

具體的栗子

# count統計條數
select count(*) from yyTest group by department;

# sum總和
select sum(age) from yyTest group by department;

# max最大值
select max(age) from yyTest group by department;

# min最小值
select min(age) from yyTest group by department;

# 平均值
select avg(age) from yyTest group by department;

 

group by + with rollup的栗子

with rollup用來在所有記錄的最后加上一條記錄,顯示上面所有記錄每個字段的總和(不懂的直接看栗子)

select GROUP_CONCAT(username) from yyTest group by department with rollup;

select sum(age) from yyTest group by department with rollup;

 

select count(*) from yyTest group by department with rollup ;

 

 


免責聲明!

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



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