我有一个庞大的魔术数据库:聚会卡和名单。卡表包含每张卡的类型和转换后的法术力费用(以及其他内容)。甲板使用两个表存储:甲板本身称为"甲板"和一个名为" deckmembers"的表,其中每行包含甲板的ID,ID该套牌中包含的卡片,以及该卡片中出现的该卡片的份数。
我想要的是这些数据的视图,其中行是:
deck:甲板的ID
cmc:该牌组中至少一张牌上出现的总法术力费用
比例:该牌组中具有该cmc
的非国家牌的百分比或者我最好用Python或R或其他东西来获取这些数据?
This question is conceptually similar, but no one has answered it.
编辑:
因为你问过,这里有一些示例数据:
卡:
id | name | fulltype | cmc
----+---------------------+-----------------+-----
1 | "Ach! Hans, Run!" | Enchantment | 6
2 | 1996 World Champion | Summon _ Legend | 5
4 | AWOL | Instant | 3
5 | Abandon Hope | Sorcery | 2
6 | Abandon Reason | Instant | 3
甲板:
id | name
----+-----------------
1 | RDW
2 | Red Deck Recall
3 | RDW
4 | Red Deck Wins
5 | Red Deck Wins
deckmembers:
deck | card | count
------+-------+-------
1 | 14031 | 1
1 | 15011 | 1
1 | 14263 | 1
1 | 12966 | 1
1 | 12536 | 1
任何牌组都会有很多牌。任何卡片都可能出现在许多套牌中。每张牌都有一个0-12的整数关联它,这被称为"转换后的法力消耗"或CMC。这就是你需要知道的全部内容。不要在我的帐户上学习玩Magic。
我想要的东西可能看起来像:
deck | cmc | perc
------+-------+-------
1 | 1 | 11
1 | 2 | 11
1 | 3 | 11
1 | 4 | 11
1 | 5 | 11
在哪里" perc"在第一行中,表示ID为1的卡片中有11%的卡片具有cmc 1。
答案 0 :(得分:0)
解决了!
SELECT
d.id,
c.cmc,
(CAST(SUM(m.count) AS FLOAT) /
(SELECT
CAST(SUM(m1.count) AS FLOAT)
FROM deckmembers AS m1
JOIN cards AS c1 ON c1.id=m1.card
WHERE NOT m1.sideboard
AND c1.fulltype NOT LIKE '%Land%'
AND m1.deck=d.id)
) * 100 AS perc
FROM deckmembers AS m
JOIN decks AS d ON d.id=m.deck
JOIN cards AS c ON c.id=m.card
WHERE NOT m.sideboard
AND c.fulltype NOT LIKE '%Land%'
GROUP BY d.id, c.cmc;
我还发布了问题here更简单版本的解决方案。