鍍金池/ 問(wèn)答/PHP  數(shù)據(jù)庫(kù)/ 新手請(qǐng)教如何用SQL在成績(jī)表和學(xué)生表通過(guò)學(xué)生名字查詢某人的總分和在全年級(jí)的排名

新手請(qǐng)教如何用SQL在成績(jī)表和學(xué)生表通過(guò)學(xué)生名字查詢某人的總分和在全年級(jí)的排名

單表我是會(huì)查詢的,由于需要和學(xué)生表鏈表查詢,我就不會(huì)了,學(xué)生表和成績(jī)變中學(xué)生ID是一致的,只有學(xué)生表中有學(xué)生名字,成績(jī)表中有各科成績(jī),以學(xué)生ID關(guān)聯(lián),所以如果我要查“張三”的總成績(jī)并得出他在全年級(jí)的排名,要怎么查?請(qǐng)教前輩們

回答
編輯回答
你的瞳

SELECT b.rank,c.score FROM (
SELECT count(*)+1 as 'rank' FROM (
SELECT id,u.score FROM 學(xué)生表 i LEFT JOIN (
SELECT id,SUM(score)as score FROM 成績(jī)表 GROUP BY id
)u ON u.id=i.id ORDER BY u.score DESC
) a WHERE a.score>(SELECT sum(score) FROM 成績(jī)表 WHERE id=1)
) b
LEFT JOIN (
SELECT sum(score)as score FROM 成績(jī)表 WHERE id=1
) c on 1=1

應(yīng)該是可以一步到位的,試一試

2017年1月21日 14:39
編輯回答
何蘇葉

zhangshanScore = select sum(score) from 成績(jī) g inner join 學(xué)生 s g.student_id = s.id where s.id = 學(xué)生id;

select count(*) + 1 as 排名 from (select sum(score) from 成績(jī) group by student_id having sum(score) > zhangshanScore) as a;
排名是查詢表內(nèi)分?jǐn)?shù)比他多的人數(shù)+1

2018年5月29日 16:21