2012-02-22 65 views
1

該表有三個列(組,排名,分數),帶有複合主鍵(Group,Rank)。每個小組至少有一個等級爲1和分數的條目。如果每個組有多於一行,它將具有大於1的分數和分數。例如:排序項目組的sqlite子查詢

+-------+------+-------+ 
| Group | Rank | Score | 
+-------+------+-------+ 
|  1 | 1 | 100 | 
|  1 | 2 | 99 | 
|  1 | 3 | 80 | 
|  2 | 1 | 70 | 
|  2 | 2 | 68 | 
|  2 | 3 | 50 | 
|  2 | 4 | 20 | 
|  3 | 1 | 80 | 
+-------+------+-------+ 

我的目標是要選擇所有行「接近」每個組的最高分,其中最高分被定義爲1元集團Rank值的分數。在上面的例子中,第1組的得分最高爲100分,第2組的得分最高爲70分,第3組最高得分爲80分。我們希望選擇最多比最高分數小5%的所有行。對於上面的例子,所產生的選擇將返回:

+-------+------+-------+ 
| Group | Rank | Score | 
+-------+------+-------+ 
|  1 | 1 | 100 | 
|  1 | 2 | 99 | 
|  2 | 1 | 70 | 
|  2 | 2 | 68 | 
|  3 | 1 | 80 | 
+-------+------+-------+ 

我的第二個目標是得分/ top_score的比例放置作爲新的列,這將消除上述目標。 在此先感謝。對於SQLite。

回答

1

未經測試,脫離我的頭頂。

SELECT s."Group" 
    , s."Rank" 
    , s."Score" 
    , s."Score"/ts."Score" as "ScoreRatio" 
FROM scores s 
    JOIN (
     SELECT "Group", "Score" 
     FROM scores 
     WHERE "Rank" = 1 
) ts 
    ON s."Group" = ts."Group" 
    AND 0.95 * ts."Score" <= s."Score" 
+0

經過測試,效果很好。謝謝!但由於值可以是整數,因此該部門需要進行投射。 – jobobo 2012-02-22 03:44:27