2016-05-20 10 views
0

ボードゲームに関する情報(名前、発行年、メカニック、パブリッシャー、www.boardgamegeek.comでの所有者数、boardgamegeekの現在のランク)を追跡するSQLiteデータベースがあります。そのゲーム)。スキーマは次のとおりです。SQLiteの各年の最大合計を選択してください

Schema for database

私は、特定の出版社のために年間で最もポピュラーメカニクス(所有しているコピー数が最も多いメカニック)を得ることに興味があります。私が持っている現在のクエリは次のようになります。

select games.year as yr, mechanics.name as mech, sum(collection.owned) as sm 
from games 
inner join gamemech on games.bggid = gamemech.bggid 
inner join mechanics on gamemech.mechid = mechanics.mechid 
inner join gamepub on gamepub.bggid = games.bggid 
inner join publishers on publishers.pubid = gamepub.pubid 
inner join collection on collection.bggid = games.bggid 
where publishers.name like '%stronghold%' 
group by yr, mech order by yr limit 20; 

これが返されます。

1974|Commodity Speculation|1460 
1974|Dice Rolling|1460 
1974|Tile Placement|1460 
1982|Action Point Allowance System|16111 
1982|Dice Rolling|16111 
1982|Modular Board|16111 
1982|Secret Unit Deployment|16111 
1985|PaperandPencil|1949 
1991|Auction/Bidding|1266 
1992|Grid Movement|1704 
1992|Pickup and Deliver|1704 
2011|Action Point Allowance System|7943 
2011|Area Control/Area Influence|174 
2011|Area Movement|3607 
2011|Auction/Bidding|174 
2011|Card Drafting|5133 
2011|Deck/Pool Building|3768 
2011|Dice Rolling|2385 
2011|Hand Management|5663 
2011|Line Drawing|2141 

は、私が本当に興味はちょうど一年、メカニック、そして最高の持っているものは何でもメカニックのために所有しているコピーの和であります毎年合計します。 (ネクタイはしかし分けることができます)このように:

1974|Commodity Speculation|1460 
1982|Action Point Allowance System|16111 
1985|PaperandPencil|1949 
1991|Auction/Bidding|1266 
1992|Grid Movement|1704 
2011|Action Point Allowance System|7943 

私は、クエリ内の別のSELECT文を必要とするかもしれないと思うが、私はそれが仕事を得るように見えることはできません。助言がありますか?

答えて

0

解決策がちょうど私に当たった。

私は基本的に各グループのmax(sum)を取得したいと考えていました。あなたがしなければならないことは、すべてのデータを持っているクエリを把握することです(これは私が持っていた最初のクエリです)。私のためには:

select games.year as yr, mechanics.name as mech, sum(collection.owned) as sm 
from games 
inner join gamemech on games.bggid = gamemech.bggid 
inner join mechanics on gamemech.mechid = mechanics.mechid 
inner join gamepub on gamepub.bggid = games.bggid 
inner join publishers on publishers.pubid = gamepub.pubid 
inner join collection on collection.bggid = games.bggid 
where publishers.name like '%stronghold%' 
group by yr, mech order by yr limit 20; 

これは主な質問にあります。次に、その中から選択したいと考えています。私は、に興味がある:

games.year, mechanics.name, max(sm) 

トリックはあなたが後でそれに参加できるようにするために、最初のクエリ内の各テーブルには、(私にとってこれは年、メカ、そしてSMである)と命名する必要があるということです。最終的なクエリは次のとおりです。

Select games.year, mechanics.name, max(sm) from (
select games.year as yr, mechanics.name as mech, sum(collection.owned) as sm 
from games 
inner join gamemech on games.bggid = gamemech.bggid 
inner join mechanics on gamemech.mechid = mechanics.mechid 
inner join gamepub on gamepub.bggid = games.bggid 
inner join publishers on publishers.pubid = gamepub.pubid 
inner join collection on collection.bggid = games.bggid 
where publishers.name like '%stronghold%' 
group by yr, mech) 
inner join games on games.year = yr 
inner join mechanics on mechanics.name = mech 
group by yr; 

私は意味があることを望みます。

関連する問題