想象一下,我有一项运动,我有桌子,MATCH和桌子PLAYER,以及桌子MATCH_PLAYER。 MATCH_PLAYER表显然将某个匹配链接到某些玩家,并且在表MATCH_PLAYER中,我存储诸如每个玩家所玩的位置,得分点数等信息。 MATCH表包含哪支队伍获胜,比赛日期等等。
我可以进行查询,例如"当player_id播放时,%赢取率是多少?#34;使用此功能,当您提供玩家ID时:
SELECT
sum(case when m.win_left = mp.left then 1 else 0 end) * 100.00
/ count(*) as win_percentage
FROM
match m
inner join match_player mp
on mp.match_id = m.id
WHERE mp.player_id = [whatever]
然而,我不知道的是如何说"当player_id x和player_id y一起玩时,%赢率是多少"。
这显然是数据库背后的一个基本理念,但我不能为我的生活找出我想做的术语,所以搜索它一直很难。
答案 0 :(得分:1)
只需加入桌子两次 - 每位玩家一次:
SELECT
SUM(CASE WHEN (m.win_left = mp.left) AND (M.win_dire = MP2.left) THEN 1 ELSE 0 END) * 100.00
/ COUNT(*) AS win_percentage
FROM
Match M
INNER JOIN Match_Player MP1 ON
MP1.match_id = M.id AND
MP1.player_id = [whatever]
INNER JOIN Match_Player MP2 ON
MP2.match_id = M.id AND
MP2.player_id = [whatever #2]
如果你要超过两三个玩家,那么通过集合匹配可以提高其他一些方法,随着玩家数量的增加可能更有效,但对于你的情况,这可能是最快的。