C表包含字段Cno、Cname、Ccredit、Cteacher分別表示課程編號、課程名、學分和任課教師;SC表包含字段Sno、Cno和Score,分別表示學號、課程編號和成績
C表

SC表
SELECT C.Cno,C. Cname,SUM(SC. Score),MAX(SC. Score) FROM C,SC WHERE C.Cno =SC.Cno GROUP BY C. Cname,C.CnoORDER BY C.Cno;
結果:

分析:
select 列a,聚合函數 from 表名 where 過濾條件 group by 列a having 過濾條件
group by 字句也和where條件語句結合在一起使用。當結合在一起時,where在前,group by 在后。即先對select xx from xx的記錄集合用where進行篩選,然后再使用group by 對篩選后的結果進行分組 使用having字句對分組后的結果進行篩選
需要注意having和where的用法區別:
1.having只能用在group by之后,對分組后的結果進行篩選(即使用having的前提條件是分組)。
2.where肯定在group by 之前
3.where后的條件表達式里不允許使用聚合函數,而having可以。
四、當一個查詢語句同時出現了where,group by,having,order by的時候,執行順序和編寫順序是:
1.執行where xx對全表數據做篩選,返回第1個結果集。
2.針對第1個結果集使用group by分組,返回第2個結果集。
3.針對第2個結果集中的每1組數據執行select xx,有幾組就執行幾次,返回第3個結果集。
4.針對第3個結集執行having xx進行篩選,返回第4個結果集。
5.針對第4個結果集排序。
注意:
使用group by的SQL語句中,select中返回的字段,必須滿足以下兩個條件之一:
1.包含在group by語句的后面,作為分組的依據;
2.這些字段包含在聚合函數中

