有時候,當我們需要對資料庫內部資料進行排名顯示的時候,我們常常會設定一些變數跟蹤查詢,但是,有時候變數過多,我們常常被變數搞得比較暈,所以,有時候,我們需要一種在我們寫程式時候的乙個類似的for迴圈來實現,其實,我們在資料庫中,也能認為的製造乙個for迴圈來查詢資料,當我們查詢乙個表時,如果我們將整張表先按照一定的大小順序排列的話,我們會得到乙個從大到小,或者從小到大的一些資料,那麼,當我們設定乙個子查詢,子查詢中的條件引數中摻雜著外部函式的引數,此時當外部函式引數返回乙個值時,我們的子查詢就是遍歷一圈,故,這種方法的效率比較低,但是,不可否認的是,會製造乙個我們比較想要的查詢方式:下面,我們來看看乙個關於排名的問題。
編寫乙個 sql 查詢來實現分數排名。如果兩個分數相同,則兩個分數排名(rank)相同。請注意,平分後的下乙個名次應該是下乙個連續的整數值。換句話說,名次之間不應該有「間隔」。
±—±------+
| id | score |
±—±------+
| 1 | 3.50 |
| 2 | 3.65 |
| 3 | 4.00 |
| 4 | 3.85 |
| 5 | 4.00 |
| 6 | 3.65 |
±—±------+
例如,根據上述給定的 scores 表,你的查詢應該返回(按分數從高到低排列):
±------±-----+
| score | rank |
±------±-----+
| 4.00 | 1 |
| 4.00 | 1 |
| 3.85 | 2 |
| 3.65 | 3 |
| 3.65 | 3 |
| 3.50 | 4 |
±------±-----+
這個時候,我們就希望有個迴圈,當我取出乙個數出來的時候,我能確定有幾個數比它大,就會排到第幾,故:我們可以用以下的方法來實現:
select score, (select count(distinct score) from scores where score >= s.score) as rank from scores s order by score desc ;
我們用count記錄,因為外層是乙個降序排列,此時,我們可以假設,當外面第一的時候,此時的count函式遍歷怎個分數表, 只會是1;故此時可以起到排名的作用,當然,這個也給我們創造了乙個排名多少的條件,直接再用乙個查詢,篩選count的排名的數值就可以了。
嵌入式資料庫
include include include include int print void para,int columncount,char columnvalue,char columnname 由使用者處理查詢的結果 printf n return0 int main char name 2...
嵌入式資料庫sqlite
自虛擬神話 也許往往大家是不需要像mysql sqlserver這類在複雜的資料庫,那麼sqlite 值得你去嘗試下!什麼是 sqlite sqlite 是一款輕量級的 基於檔案的嵌入式資料庫,2000年就已經誕生,經過多年的發展,直到今天已經成為最流行的,包括google在內的公司在其桌面軟體中亦...
嵌入式資料庫sqlite
自虛擬神話 也許往往大家是不需要像mysql sqlserver這類在複雜的資料庫,那麼sqlite值得你去嘗試下!什麼是 sqlite sqlite 是一款輕量級的 基於檔案的嵌入式資料庫,2000年就已經誕生,經過多年的發展,直到今天已經成為最流行的,包括google在內的公司在其桌面軟體中亦使...