隨筆 SQL查詢之group by和求最值的使用

2021-09-22 13:01:21 字數 1330 閱讀 5932

直接開始:

首先是表資料

要求①: 查詢出學生的各個科目和其成績, 科目的成績以最高分為最終結果,並按照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...