只有兩個字段用一個sql語句查詢出某個學(xué)生的姓名、成績以及在表中的排名
昨天去面試時遇到一個這樣的問題:
有一張成績表,只有兩個字段,姓名和成績。怎樣用一個sql語句查詢出某個學(xué)生的姓名,成績以及在表中的排名?
一時間我也想不出具體實(shí)現(xiàn),我就提了兩種思路:一種是通過join關(guān)聯(lián)一個查詢出他排名的sql語句;一種是通過group by來實(shí)現(xiàn)。
回答得連自己都覺得有點(diǎn)心虛。請問大家如何實(shí)現(xiàn)呢?
假設(shè):表名字為Course,兩個字段分別為name和score
實(shí)現(xiàn)語句:
SELECT 學(xué)生,成績, (SELECT COUNT(*) FROM 表 WHERE a.成績<=成績) AS 排名 FROM 表 AS a
方法二:
declare @Course table(name varchar(100),cj int) insert into @Course select 'a',99 union all select 'b',66 union all select 'c',88 select * from ( select (select 1+count(name) from @Course where cj>t.cj) mc,name,cj from @Course t ) tem where name='b'
如果有成績相同的記錄的時候,goodspeed的語句確實(shí)有一些瑕疵,但是我根據(jù)他的語句稍微修改了一下就很完美了。
SELECT name,score, (SELECT COUNT(*)+1 FROM course WHERE a.score<score) AS sort FROM course AS a order by sort
更多請到這里查看評論
相關(guān)文章
詳解數(shù)據(jù)庫中跨庫數(shù)據(jù)表的運(yùn)算
跨庫數(shù)據(jù)表,是指邏輯上同一張數(shù)據(jù)表被分別存儲在不同數(shù)據(jù)庫中。接下來通過本文給大家介紹數(shù)據(jù)庫中跨庫數(shù)據(jù)表的運(yùn)算方法,感興趣的朋友跟隨小編一起看看吧2018-11-11數(shù)據(jù)庫設(shè)計(jì)的完整性約束表現(xiàn)在哪些方面
數(shù)據(jù)完整性是指數(shù)據(jù)的正確性、完備性和一致性,是衡量數(shù)據(jù)庫質(zhì)量好壞的規(guī)范。數(shù)據(jù)庫完整性由各式各樣的完整性約束來確保,因而可以說數(shù)據(jù)庫完整性規(guī)劃即是數(shù)據(jù)庫完整性約束的規(guī)劃。那么,數(shù)據(jù)庫設(shè)計(jì)的完整性約束表現(xiàn)哪些方面?2015-10-10Hadoop 2.x偽分布式環(huán)境搭建詳細(xì)步驟
這篇文章主要為大家詳細(xì)介紹了Hadoop 2.x偽分布式環(huán)境搭建詳細(xì)步驟,感興趣的朋友可以參考一下2016-05-05聊聊Navicat統(tǒng)計(jì)的行數(shù)竟然和表實(shí)際行數(shù)不一致的問題
Navicat作為數(shù)據(jù)庫管理工具,在業(yè)界廣受歡迎,這篇文章主要介紹了Navicat統(tǒng)計(jì)的行數(shù)竟然和表實(shí)際行數(shù)不一致的問題,需要的朋友可以參考下2021-12-12