如何使用使用 HAVING 與 ORDER BY?
@R星校長
使用having
子句進行分組篩選
簡單來說,having
子句用來對分組後的資料進行篩選,即having
針對查詢結果中的列發揮篩選資料作用。因此having
通常與Group by
連用。
基本格式:
select [聚合函式] 欄位名 from 表名 [where 查詢條件] [group by 欄位名] [having 欄位名 篩選條件]
表Info
的資料資訊仍如下:
category | count | digest |
---|---|---|
a | 5 | a2002 |
a | 2 | a2001 |
a | 11 | a2001 |
b | 20 | b2003 |
b | 15 | b2002 |
b | 3 | b2001 |
c | 9 | c2005 |
c | 9 | c2004 |
c | 8 | c2003 |
c | 7 | c2002 |
c | 4 | c2001 |
示例:查詢將表中資料分類後數量大於20
的類別資訊
select
語句中,where
、group by
、having
子句和聚合函式的執行次序如下:
-
where
子句從資料來源中去除不符合條件的資料; -
然後
group by
子句蒐集資料行到各個組中; -
接著統計函式為各個組計算統計值;
-
最後
having
子句去掉不符合其組搜尋條件的各組資料行。
Having
與Where
的區別
where
子句都可以用having
代替,區別在於where
過濾行,having
過濾分組;
where
子句的作用是在對查詢結果進行分組前,將不符合where
條件的行去掉,即在分組之前過濾資料,where
條件中不能包含聚組函式,使用where
條件過濾出特定的行;
having
子句的作用是篩選滿足條件的組,即在分組之後過濾資料,條件中經常包含聚組函式,使用having
條件過濾出特定的組,也可以使用多個分組標準進行分組。
having
結合where
示例:
Group By
和Order By
基本格式
select [聚合函式] 欄位名 from 表名 [where 查詢條件] [group by 欄位名] [order by 欄位名 排序方向]
示例:(以降序方式輸出資料分類的彙總)
若分組欄位和排序欄位一樣時,可不需要order by關鍵字,則只需告知排序方向,即可簡寫成:
程式設計要求
- 我們要評選三好學生,條件是至少有兩門課程在
90
分以上(包括90
分)才能有資格,請列出符合的學生的學號(sno
)及其90
分以上(包括90
分)科目總數; - 學校評選先進學生,要求平均成績大於
90
分(包括90
分)的學生都有資格,並且語文課必須在95
分以上(包括95
分),請列出有資格的學生的學號(sno
)及其科目的平均分。
給定資料表tb_grade
格式如下:
sno | pno | score |
---|---|---|
1 | 語文 | 95 |
1 | 數學 | 98 |
1 | 英語 | 90 |
2 | 語文 | 89 |
2 | 數學 | 91 |
2 | 英語 | 92 |
3 | 語文 | 85 |
3 | 數學 | 88 |
3 | 英語 | 96 |
4 | 語文 | 95 |
4 | 數學 | 89 |
4 | 英語 | 88 |
預期輸出:
sno count(*)
1 3
2 2
sno avg(score)
1 94.3333
4 90.6667
開始你的任務吧,祝你成功!
USE School;
#請在此處新增實現程式碼
########## Begin ##########
#1.查詢表中至少有兩門課程在90分以上的學生資訊
select sno, count(*)
from tb_grade
where score >= 90
group by sno
having count(*) >= 2;
#2.查詢表中平均成績大於90分且語文課在95分以上的學生資訊
select sno, avg(score)
from tb_grade
where sno in
(select sno from tb_grade
where score >=95 and pno = '語文')
group by sno
having avg(score) > 90;
########## End ##########
相關文章
- MySQL中ORDER BY與LIMIT一起使用(有坑)MySqlMIT
- SQLServer使用case when中的order bySQLServer
- SAP MM Return Purchase Order之使用
- having
- oracle order by索引是否使用的情況Oracle索引
- order by與索引索引
- 如何使用程式碼修改SAP CRM One Order CUMULAT_H物件的值物件
- mysql select欄位別名 不可以在select 或者where中使用 但是group by 與order by可以使用MySql
- MySQL按指定順序排序(order by field的使用)MySql排序
- having和where
- 資料庫中where與having的區別資料庫
- Mongodb 也有collation 與 如何使用MongoDB
- HAVING子句的力量
- MySQL中union和order by同時使用的實現方法MySql
- sqlserver使用order by case when進行優先順序排序SQLServer排序
- 聚合函式及分組與過濾(GROUP BY … HAVING)函式
- 使用@AutoConfigureBefore、After、Order調整Spring Boot自動配置順序Spring Boot
- 使用ABAP程式碼建立S/4HANA裡的Sales Order
- 精通併發與 Netty (一)如何使用Netty
- 使用SAP CDS view快速建立一個Fiori應用,管理Service OrderView
- Kafka 與 RabbitMQ 如何選擇使用哪個?KafkaMQ
- 如何將WorkManager與RxJava一起使用RxJava
- 如何使用Linux使用者身份與程式許可權的設定?Linux
- MYSQL order by排序與索引關係總結MySql排序索引
- group by 和 order by 一起使用,報錯 ORA-00979:不是 GROUP BY 表示式
- mongodb使用者與角色使用MongoDB
- C++ Qt開發:如何使用訊號與槽C++QT
- 如何將AI/ML與物件儲存結合使用AI物件
- 如何在 JS 迴圈中正確使用 async 與 awaitJSAI
- 如何使用 WebRTC 與 Kurento 建立視訊會議 AppWebAPP
- CSS orderCSS
- mysql資料庫全家桶(安裝與如何寫sql,如何使用)MySql資料庫
- 如何使用反射反射
- UserAgent如何使用
- MQTT如何使用MQQT
- DBUtils如何使用
- 如何使用GitHub?Github
- 如何使用 CommandLineRunner?