關於資料庫嵌入式的子查詢

2021-09-09 07:51:10 字數 1208 閱讀 6544

有時候,當我們需要對資料庫內部資料進行排名顯示的時候,我們常常會設定一些變數跟蹤查詢,但是,有時候變數過多,我們常常被變數搞得比較暈,所以,有時候,我們需要一種在我們寫程式時候的乙個類似的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在內的公司在其桌面軟體中亦使...