いつもありがとうございます。
いま、A,B,Cの3名のプレーヤーが20面ダイスを振り合い、勝ったほうが振り続け、負けた者は交代するというもので、最初はA,Bが対戦するものとします。
そして各プレーヤーの先攻時と後攻時のスコアを集計します。
具体的には下記のようにDBを作りました。viewを使って先攻、後攻時のスコア集計テーブルを作って両者を結合するという流れになっています。
これをviewを使わずに1文で実現するqueryを考えているのですがなにかよい案があればご教示ください。inner joinを使うものと思うのですが、いろいろ試したのですがよく使い方が分かりませんでした。特に1つのqueryで複数のgroup byを使いつつ、結合をどうすればいいか、頭が混乱しています。
よろしくお願い致します。
lang
1 2// p1:先攻プレーヤー、s1:先攻スコア、p2:後攻プレーヤー、s2:後攻スコア 3sqlite> create table dice (p1 text, s1 integer, p2 text, s2 integer); 4 5// サンプルデータ投入 6sqlite> insert into dice values ("A", 12, "B", 5); 7sqlite> insert into dice values ("A", 15, "C", 9); 8sqlite> insert into dice values ("A", 8, "B", 18); 9sqlite> insert into dice values ("B", 20, "C", 15); 10sqlite> insert into dice values ("B", 5, "A", 8); 11sqlite> insert into dice values ("A", 9, "C", 11); 12sqlite> insert into dice values ("C", 15, "B", 12); 13sqlite> insert into dice values ("C", 15, "A", 9); 14sqlite> insert into dice values ("C", 3, "B", 17); 15sqlite> insert into dice values ("B", 12, "A", 7); 16 17// 各プレーヤーの先攻時、後攻時のスコアを集計するview 18sqlite> create view sum1 as select p1, sum(s1) as t1 from dice group by p1; 19sqlite> create view sum2 as select p2, sum(s2) as t2 from dice group by p2; 20 21// 結合 22sqlite> select p1, t1, t2 from sum1 left outer join sum2 on p1=p2; 23A|44|24 24B|37|52 25C|33|35 26
sqlite3 --version 3.6.20
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/06/16 02:00