该表有三列(Group,Rank,Score),带有复合主键(Group,Rank)。每个小组至少有一个Rank为1的条目和一个分数。如果每个组有多个行,则其排名大于1且得分。例如:
+-------+------+-------+
| 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。
答案 0 :(得分: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"