sql中group by的理解


在我們的日常工作中,寫sql的時候,group by應該是每個程序員都會遇到的。

今天,我們來談論一下關於group by 的相關理解。

針對group by 的例子,我們可以寫成如下樣子:

  select (1) from your_table where (2) group by (3) having (4)

下面我們來看一下1、2、3、4分別代表什么,應該怎么用?

首先,我們來看(3):

  (3)為group by的字段,字段的選擇為:前面sql語句(select (1) from your_table where (2))鎖查詢出來的字段和聚合函數。

其次,來看(1):

  因為,我們再語句中用到了group by,所以,(1)中的列只能是group by 的列或聚合函數(avg,max,min... ...)

再來看(2):

  (2)中的限制條件是針對前面查詢語句(select (1) from your_table)和一般where語句無異。

最后,我們來看(4):

  (4)是什么呢?其實(4)和where的作用是一樣的,不同的是它(4)限制的范圍為group by 的字段或聚合函數。

說了這么多,大家肯定還是有疑惑。

下面我們用一個實例來進行說明:

--創建表並插入數據: 


create table sc(

 

學號 char(3),

 

課程號 char(5),

 

primary key(學號,課程號),

 

成績 int

 

);

--然后插入數據:

insert into sc values('103','3-245',86);

insert into sc values('105','3-245',75);

insert into sc values('109','3-245',68);

insert into sc values('103','3-105',92);

insert into sc values('105','3-105',88);

insert into sc values('109','3-105',76);

insert into sc values('101','3-105',64);

insert into sc values('107','3-105',91);

insert into sc values('108','3-105',78);

insert into sc values('101','6-166',85);

insert into sc values('107','6-166',79);

insert into sc values('108','6-166',81);

 

好了,現在我們有了表和數據,我們來完成一個實驗吧!

實驗:查詢最低分大於70,且最高分小於90的學號列。

首先,我們應該考慮的是,我們是不是需要分組,針對這個實驗,答案是肯定的。

那么,我們又應該以哪一個字段作為依據進行分組呢?分析過后,我們應該以學號作為分組。

最后,我們看到有兩個比較關鍵的字眼“最低分”、“最高分”。那么我們是一定需要用到聚合函數的。

明白以上幾個點后,我們就要編寫sql語句了。

這個sql語句可以編寫為:

select 學號,min(成績)as 最低分,max(成績)as 最高分 from sc group by 學號  having MIN(成績) > 70 and MAX(成績) < 90;

結果如下:

 


免責聲明!

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



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