直接開始:
首先是表資料
要求①: 查詢出學生的各個科目和其成績, 科目的成績以最高分為最終結果,並按照uid正序排列
第一步 查詢學生,科目及其成績:
select uid,uname,ucourse,uscores
from users;
第二步 用group by對uname和ucourse進行分組,並對score取最大值.在這裡初學者可能寫錯的乙個做法是:
select uid,uname,ucourse,max(uscores)
from users
group by ucourse,uname;
這種寫法會導致的錯誤是, select之後的max函式選取的結果,可能跟你源資料表的記錄不一樣, 因為group by之後的資料(uid,uname,ucourse,uscores)均顯示為分組後讀取到的第一行資料,所以即使select之後有max函式,也是分組後的資料不一致.
此為錯誤顯示
可以看出 :
109 對應的正確的uid為: 10
108 對應的正確的uid為: 14
106 對應的正確的uid為: 13
第三步:所以這裡就需要用到 子查詢 !!!
先對 表資料裡的uscores 進行倒敘排列, 然後進行查詢,
select u.uid,u.uname,u.ucourse,u.uscores,
max(u.uscores)
from
(select
*from users
order
by uscores desc
)as u
group
by u.uname,u.ucourse
order
by u.uname;
最終顯示出正確的結果:
這裡呢求的是最大值, 如果 求最小值,就只需要改 max 和 desc即可
Oracle高階查詢之GROUP BY
為了方便大家學習和測試,所有的例子都是在oracle自帶使用者scott下建立的。現在客戶的需求是統計部門中每種工作的工資總額,最後還需要統計所有人的工資總數,相信這樣的需求對大家來說還是比較簡單的,很快就能寫出sql語句,如下 sql view plain copy select deptno,j...
Oracle高階查詢之GROUP BY
對於group by 的方式不再累贅,高階方式如下案例。為了方便大家學習和測試,所有的例子都是在oracle自帶使用者scott下建立的。所用emp表,如果沒有此表請參考文章 中拷貝 現在客戶的需求是統計部門中每種工作的工資總額,最後還需要統計所有人的工資總數,相信這樣的需求對大家來說還是比較簡單的...
SQL語句之GROUP BY用法詳解
大家都知道groupby在sql語句中代表按照某個字段分組,但原理和用法在網上不容易查得到。下面我用一句話簡介的來說明 如果select 中出現了非聚合函式的字段,那麼所有欄位都要在group by後面出現,然而group by後面的分組字段可以不用在select中出現。原因 因為每一次的selec...