SQLite:在总结其他行时,如何从不同的行添加数据?

时间:2017-08-06 21:12:52

标签: sql sqlite

我有一个纸牌游戏分析程序,它将结果存储在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

如何做到这一点?

2 个答案:

答案 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

诀窍: - )