我有一个纸牌游戏分析程序,它将结果存储在SQLite数据库中,其中包含以下值的整数列:round,table,game,pair和score。
"得分"的模式表是:
CREATE TABLE score(
round INTEGER,
table_number INTEGER,
game INTEGER,
pair_or_player INTEGER,
score INTEGER
);
电子。 G。一个简单的情况,只有两对和一轮,每场两场比赛,其中21点可以达到这样:
+-------+--------------+------+----------------+-------+
| round | table_number | game | pair_or_player | score |
+-------+--------------+------+----------------+-------+
| 1 | 1 | 1 | 1 | 8 |
| 1 | 1 | 1 | 2 | 21 |
| 1 | 1 | 2 | 1 | 21 |
| 1 | 1 | 2 | 2 | 14 |
+-------+--------------+------+----------------+-------+
一个简单的SELECT round, table_number, game, pair_or_player, score FROM score
输出:
1|1|1|1|8
1|1|1|2|21
1|1|2|1|21
1|1|2|2|14
我需要的是一个额外的列,其中21减去同一游戏的对手得分(由同一轮,table_number和游戏以及不同的pair_or_player标识),相应查询的结果将是:
1|1|1|1|8 |0
1|1|1|2|21|13
1|1|2|1|21|7
1|1|2|2|14|0
如何做到这一点?
答案 0 :(得分:2)
你需要自己内联表。
(我不完全确定你的意思是什么,但我们假设有一个识别每场比赛的ID,一个由两个记录组成的比赛,一个为胜者,一个为输家):
SELECT winners.pair, winners.score, losers.pair, losers.score
FROM (SELECT pair, score FROM score WHERE score = 21) as winners
INNER JOIN (SELECT pair, score FROM score WHERE score < 21) as losers
ON winners.match_id = losers.match_id;
答案 1 :(得分:1)
我自己找到了。
SELECT
a.round,
a.table_number,
a.game,
a.pair_or_player,
a.score,
21 - b.score
FROM
score AS a,
score AS b
WHERE
a.round = b.round
AND a.table_number = b.table_number
AND a.game = b.game
AND a.pair_or_player != b.pair_or_player
诀窍: - )