2012-02-22 38 views
1

テーブルには複合プライマリキー(Group、Rank)を持つ3つのカラム(Group、Rank、Score)があります。各グループには、ランク1とスコアの少なくとも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のランク値のスコアになるように定義された各グループのトップスコアに「近い」すべての行を選択することです。上記の例では、グループ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

関連する問題