「Puzzle55:競走馬の入賞回数」の編集履歴(バックアップ)一覧はこちら

Puzzle55:競走馬の入賞回数」(2008/06/24 (火) 16:26:08) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

*問題 -突然だが、あなたはたった今競馬のDBマネージャーとして雇われた。 -胴元は、統計を取るためにレースの記録を残しており、その記録先のテーブルは次のとおりだ。 CREATE TABLE RacingResults (track_id CHAR(3) NOT NULL, race_date DATE NOT NULL, race_nbr INTEGER NOT NULL, win_name CHAR(30) NOT NULL, place_name CHAR(30) NOT NULL, show_name CHAR(30) NOT NULL, PRIMARY KEY (track_id, race_date, race_nbr)); RacingResults:レース結果テーブル、track_id:トラックID、 race_date:レース日、race_nbr:レース番号、win_name:1着の馬名、 place_name:2着の馬名、show_name:3着の馬名 -ある日、雇い主の胴元がやってきて、「各馬がこれまで何回入賞したかを知りたい」と言ってきた。彼の望みを叶えてあげて欲しい。 *chiakiの解答 *考え方 -馬の名前を全て取り出して、名前でグループ化したい。 -UNIONでは一部うまくいかなかったが、UNION ALLを使って馬の名前を取り出すとうまくいった。 *SQL文 -馬の名前の取り出し方 (SELECT win_name AS name, count(win_name) AS freq FROM RacingResults R GROUP BY R.win_name) UNION ALL (SELECT place_name AS name, count(place_name) AS freq FROM RacingResults R GROUP BY R.place_name) UNION ALL (SELECT show_name AS name, count(show_name) AS freq FROM RacingResults R GROUP BY R.show_name); ↓UNIONの結果 name | freq -------------------------------+------ A | 1 A | 2 B | 1 C | 1 ← C が 1 なのはおかしい!! E | 1 F | 1 O | 1 P | 1 P | 2 Q | 2 ↓UNION ALLの結果 name | freq -------------------------------+------ B | 1 E | 1 O | 1 A | 2 B | 1 F | 1 C | 1 P | 2 A | 1 C | 1 P | 1 Q | 2 -上の結果を利用して求める結果を表示 SELECT name, sum(freq) AS freq FROM ((SELECT win_name AS name, count(win_name) AS freq FROM RacingResults R GROUP BY R.win_name) UNION ALL (SELECT place_name AS name, count(place_name) AS freq FROM RacingResults R GROUP BY R.place_name) UNION ALL (SELECT show_name AS name, count(show_name) AS freq FROM RacingResults R GROUP BY R.show_name)) AS HName GROUP BY name; *実行結果 name | freq --------------------------------+------ B | 2 E | 1 O | 1 A | 3 F | 1 C | 2 P | 3 Q | 2 うまくいきました☆
*問題 -突然だが、あなたはたった今競馬のDBマネージャーとして雇われた。 -胴元は、統計を取るためにレースの記録を残しており、その記録先のテーブルは次のとおりだ。 CREATE TABLE RacingResults (track_id CHAR(3) NOT NULL, race_date DATE NOT NULL, race_nbr INTEGER NOT NULL, win_name CHAR(30) NOT NULL, place_name CHAR(30) NOT NULL, show_name CHAR(30) NOT NULL, PRIMARY KEY (track_id, race_date, race_nbr)); RacingResults:レース結果テーブル、track_id:トラックID、 race_date:レース日、race_nbr:レース番号、win_name:1着の馬名、 place_name:2着の馬名、show_name:3着の馬名 -ある日、雇い主の胴元がやってきて、「各馬がこれまで何回入賞したかを知りたい」と言ってきた。彼の望みを叶えてあげて欲しい。 *chiakiの解答 *考え方 -馬の名前を全て取り出して、名前でグループ化したい。 -UNIONでは一部うまくいかなかったが、UNION ALLを使って馬の名前を取り出すとうまくいった。 *SQL文 -馬の名前の取り出し方 (SELECT win_name AS name, count(win_name) AS freq FROM RacingResults R GROUP BY R.win_name) UNION ALL (SELECT place_name AS name, count(place_name) AS freq FROM RacingResults R GROUP BY R.place_name) UNION ALL (SELECT show_name AS name, count(show_name) AS freq FROM RacingResults R GROUP BY R.show_name); ↓UNIONの結果 name | freq -------------------------------+------ A | 1 A | 2 B | 1 C | 1 ← C が 1 なのはおかしい!! E | 1 F | 1 O | 1 P | 1 P | 2 Q | 2 ↓UNION ALLの結果 name | freq -------------------------------+------ B | 1 E | 1 O | 1 A | 2 B | 1 F | 1 C | 1 P | 2 A | 1 C | 1 P | 1 Q | 2 -上の結果を利用して求める結果を表示 SELECT name, sum(freq) AS freq FROM ((SELECT win_name AS name, count(win_name) AS freq FROM RacingResults R GROUP BY R.win_name) UNION ALL (SELECT place_name AS name, count(place_name) AS freq FROM RacingResults R GROUP BY R.place_name) UNION ALL (SELECT show_name AS name, count(show_name) AS freq FROM RacingResults R GROUP BY R.show_name)) AS HName GROUP BY name; *実行結果 name | freq --------------------------------+------ B | 2 E | 1 O | 1 A | 3 F | 1 C | 2 P | 3 Q | 2 うまくいきました☆

表示オプション

横に並べて表示:
変化行の前後のみ表示: