sql學習,求每人成績最好得兩項。

2022-08-22 09:21:07 字數 1796 閱讀 7514

前幾天遇到了這個問題,覺得無從下手。空了下來,仔細研究了下:

先向資料庫中寫點資料:

code

create

table

tb1 (id 

intidentity(1

,1),name 

varchar(10

),score 

int)

insert

tb1 

select'小明

',89insert

tb1 

select'小明

',99insert

tb1 

select'小羅

',85insert

tb1 

select'小李

',56insert

tb1 

select'小李

',77insert

tb1 

select'小李

',66insert

tb1 

select'小陳

',74insert

tb1 

select'小陳

',68insert

tb1 

select'小陳

',90insert

tb1 

select'小陳

',59然後開始寫語句。由於不知道怎麼入手,所以我先把問題簡化。求成績最好的那項:

code

1selecta.*

from

tb a,(

select

name,

max(score) 

asscore 

from

tb group

byname) b

2where

a.score

=b.score

3進而開始思考,求最好得前2項。於是我寫出了這樣的**:

code

selecta.*

from

tb a,(

select

name,

top2

(score) 

asscore 

from

tb group

byname) b

where

a.score

=b.score

以上**卻通不過編譯。咋一看,兩個功能相識,結構相近得**,為什麼這個就不能通過編譯呢?仔細看了看,才發現,top並不支援這種用法。

於是,我修改**:

code

select

*from

tb1 a 

where

score in(

select

top2

score 

from

tb1 

where

name

=a.name 

order

byscore 

desc

)這樣,大致結果是出來了,再排下結果的順序:

code

select

*from

tb1 a 

where

score in(

select

top2

score 

from

tb1 

where

name

=a.name 

order

byscore 

desc

) order

byname,score 

desc

求平均成績

problem description 假設乙個班有n n 50 個學生,每人考m m 5 門課,求每個學生的平均成績和每門課的平均成績,並輸出各科成績均大於等於平均成績的學生數量。input 輸入資料有多個測試例項,每個測試例項的第一行包括兩個整數n和m,分別表示學生數和課程數。然後是n行資料,每...

F 求平均成績

f 求平均成績 time limit 1000ms memory limit 32768kb 64bit io format i64d i64u submit status practice hdu 2023 description 假設乙個班有n n 50 個學生,每人考m m 5 門課,求每個學...

NYOJ 求平均成績

求平均成績 假設乙個班有n n 50 個學生,每人考m m 5 門課,求每個學生的平均成績和每門課的平均成績,並輸出各科成績均大於等於平均成績的學生數量。input 輸入資料有多個測試例項,每個測試例項的第一行包括兩個整數n和m,分別表示學生數和課程數。然後是n行資料,每行包括m個整數 即 考試分數...