日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

【SQL】分组数据,过滤分组-group by , having

發布時間:2023/12/1 数据库 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【SQL】分组数据,过滤分组-group by , having 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

學習筆記,原文來自http://blog.csdn.net/robinjwong/article/details/24845125

創建分組 - GROUP BY

分組是在SELECT語句的GROUP BY子句中建立的。它的作用是通過一定的規則將一個數據集劃分成若干個小的區域,然后針對若干個小區域進行數據處理SELECT子句中的列名必須為分組列或列函數,列函數對于GROUP BY子句定義的每個組各返回一個結果

一些規定:

?

  • GROUP BY 子句可以包含任意數目的列,這使得能對分組進行嵌套,為數據分組提供更細致的控制;
  • 如果在GROUP BY子句中嵌套了分組,數據將在最后規定的分組上進行匯總;
  • GROUP BY子句中列出的每個列都必須是檢索列或有效的表達式。如果在SELECT中使用表達式,則必須在GROUP BU子句中指定相同的表達式,不能使用別名;
  • 大多數SQL實現不允許GROUP BU列帶有長度可變的數據類型(如文本或備select departmentid, departmentname from basicdepartment group by departmentid;注型字段);
  • 除聚集計算語句外,SELECT語句中的每個列都必須在GROUP BY子句中給出
  • 如果分組列中具有NULL值,則NULL將作為一個分組返回。如果列中有多行NULL值,它們將分為一組;
  • GROUP BY子句必須出現在WHERE子句之后,ORDER BY子句之前;

過濾分組 - HAVING

除了能用GROUP BY分組數據外,SQL還允許過濾分組,規定包括哪些分組,排除哪些分組。例如,可能想要列出至少有兩個訂單的所有顧客,為了得出這種數據,必須基于完整的分組而不是個別的行進行過濾。

WHERE過濾行,而HAVING過濾分組HAVING支持所有WHERE操作符,HAVING子句中能使用聚集函數WHERE在數據分組前進行過濾。HAVING在數據分組后進行過濾。WHERE排除的行不包括在分組中

?

?

分組 V.S. 排序 - GROUP BY V.S. ORDER BY

?

?

ORDER BYGROUP BY
排序產生的輸出分組行,但輸出可能不是分組的順序
任意列都可以使用只可能使用選擇列或表達式列,而且必須使用每個選擇列表達式
不一定需要如果與聚集函數一起使用列,則必須使用


千萬不要僅依賴GROUP BY排序數據。

?

示例

?

下表:學生號(SNO),課程名(PNO),成績(GRADE)

1 YY ?90
1 SX 98
1 YW 95
2 YY 92
2 SX 91
2 YW 89
3 YY 96
3 SX 88
3 YW 85
4 YY 88
4 SX 89
4 YW 95

1. 顯式90分以上學生的課程名和成績

(不涉及分組計算,數據塊是原始表就行

? select?*?from?sc?where?GRADE?>=?90??

2. ?顯式每個學生的成績在90分以上的各有多少門

?

(涉及到分組計算,單獨計算的數據快為每個學生,數據塊整體沒有要求(因此沒有having),但是提前需要用where過濾)select?SNO,?count(*)?from?sc?where?GRADE?>=?90?group?by?SNO ?

3. ?至少有兩門課程在90分以上的學生號及90分以上的課程數 (過濾分組)

(涉及到分組計算,同時數據庫也有要求)

select?SNO,?count(*)?from?sc?where?GRADE?>=?90?group?by?SNO?having?count(*)?>=?2 ?

4. ?選出平均成績大于90分,且語文必須在95以上的學生

?

(涉及到分組計算,且之前有過濾)

?

select?SNO,?avg(GRADE)?

from?sc?

where?SNO?in?(select?SNO?from?sc?where?PNO?=?'YW'?and?GRADE?>=?95)?

group?by?SNO?

having?avg(GRADE)?>=?90 ?

?

?

轉載于:https://www.cnblogs.com/coskaka/p/7193360.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的【SQL】分组数据,过滤分组-group by , having的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。