找出每個學生超過他選修課程平均成績的課程號,能不能不用嵌套查詢,用其它方法實作?
(另外哪些嵌套查詢可以轉化為連接查詢呀?)
uj5u.com熱心網友回復:
給個表結構和樣例資料吧。查詢陳述句怎么寫和表結構有著直接關系的。
uj5u.com熱心網友回復:
回復發不了圖我私信給您
uj5u.com熱心網友回復:
在這里做一下回復吧,也方便其他大神幫看看有沒有更好的辦法。樓主給出的表結構如下:
if object_id('tempdb..#sc') is not null drop table #sc
create table #sc
(Sno nvarchar(50),Cno nvarchar(50),Grade int)
insert into #sc
select '學生1','課程1','92' union all
select '學生1','課程2','85' union all
select '學生1','課程3','88' union all
select '學生2','課程1','90' union all
select '學生2','課程2','80' union all
select '學生2','課程3','59'
select a.*,t.平均成績 from #sc a
left join (
select Sno,avg(Grade) as 平均成績
from #sc
group by Sno
)t on a.Sno=t.Sno
where a.Grade>=t.平均成績
按樓主的需求,我理解的意思是:學生1選修3門課程(課程1,課程2,課程3)。3門課程的總分為265,平均分約為88。那么找出學生1所有課程中得分大于等于88的課程。綜上得出學生1有課程1和課程3滿足。
另需求不使用嵌套查詢改為表連接。求平均數的話則會使用聚合函式Avg(),一旦使用聚合函式Avg,Sum,Min,Max,Count則無法在查詢非聚集欄位,哪怕使用了Stuff字串函式,也相當于一個嵌套查詢了。
uj5u.com熱心網友回復:
如果不用嵌套查詢是軟體層面的限制,可以把嵌套的陳述句寫成視圖。這樣就可以在應用層面上直接select * from 視圖了~~~轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/34493.html
標籤:基礎類
