MYSQL文について

このQ&Aのポイント
  • MYSQLでPLAYERS表とRESULTS表を作成するためのSQLを教えてください。
  • RESULTS表からスコアが72以下の行を取り出し、大会ID、選手ID、スコアを表示する。
  • RESULTS表を対象に、選手ごとに選手ID、大会の参加数、スコアの平均を表示する。
回答を見る
  • ベストアンサー

MYSQL文について

MYSQLで次のような表を元に(1)(2)(3)を作成するためのSQLを教えてください。 (1)PLAYERS表のPID列はその表の主キー PLAYERS表(選手表) PID(選手ID) PANME(選手氏名)   M001    JUMBO OZAKI         M002    KING KAZU   M003    ANIKI KANEMOTO (2)RESULTS表のGIDとPID列はその表の複合キーであり、主キーになっている。 RESULTS表(成績表) GID(大会ID) PID(選手ID) SCORE(スコア) HIUCUP08    M001     72 HIUCUP08    M002     75 JPNCUP09    M001     70 JPNCUP09    M002     76 JPNCUP09    M003     68 (1)RESULTS表から、スコア「(SCORE)が72以下の行を取り出し、大会ID(GID)、選手ID(PID)、スコア(SCORE)を表示する。ただし、スコア(SCOE)の昇順に表示する。 (2)RESULTS表を対象に、選手ごとに、選手ID(PID)、大会の参加数、スコア(SCORE)の平均を表示する。大会への参加回数は集合関数COUNR(*)を、スコアの平均は集合関数AVG(SCORE)を利用すればよい。 (3)スコアが72より小さかったすべての成績について、大会IDと選手氏名、スコアを選手氏名の昇順に表示する。PLAYERS表とRESULTS表を結合すればよい。 よろしくおねがいします。

  • MySQL
  • 回答数1
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
  • x_jouet_x
  • ベストアンサー率68% (162/236)
回答No.1

(1)「(SCORE)が72以下の行を取り出す」には、SELECT構文のWHERE句に比較演算子(<=)を使用します。 また、「スコア(SCORE)の昇順に表示する」には、ORDER BY 列名 ASCを使用します。 (1)のSQL文は以下です。 SELECT GID,PID,SCORE FROM RESULTS WHERE SCORE <= 72 ORDER BY SCORE ASC; (2)「集合関数COUNR(*)」ではなく、「COUNT(*)」ですよね? (2)のSQL文は以下です(各PIDごとにSELECTしています)。 SELECT PID,COUNT(*),AVG(SCORE) FROM RESULTS WHERE PID='M001'; SELECT PID,COUNT(*),AVG(SCORE) FROM RESULTS WHERE PID='M002'; SELECT PID,COUNT(*),AVG(SCORE) FROM RESULTS WHERE PID='M003'; (3)のSQL文は以下です。 SELECT RESULTS.GID,PLAYERS.PNAME,RESULTS.SCORE FROM PLAYERS,RESULTS WHERE RESULTS.SCORE <= 72 ORDER BY PLAYERS.PNAME ASC; SQLはデータベースに対して、ただデータを抽出するだけでなくSQL関数を用いたり様々なことが行えます。 と言う私もSQLを完璧に扱える訳ではありませんが・・・。 SQLを勉強されたいのであれば、参考書等でしっかり覚えた方が良いですよ。

関連するQ&A

  • MYSQLでデータベースの作成

    MYSQLで次のような表を作成するためのSQLを教えてください。 (1)PLAYERS表のPID列はその表の主キー PLAYERS表(選手表) PID(選手ID) PANME(選手氏名)   M001    JUMBO OZAKI         M002    KING KAZU   M003    ANIKI KANEMOTO (2)RESULTS表のGIDとPID列はその表の複合キーであり、主キーになっている。 RESULTS表(成績表) GID(大会ID) PID(選手ID) SCORE(スコア) HIUCUP08    M001     72 HIUCUP08    M002     75 JPNCUP09    M001     70 JPNCUP09    M002     76 JPNCUP09    M003     68 (3)各々の表について設定されたデータのSQL よろしくおねがいします。

    • ベストアンサー
    • MySQL
  • SQL文について

    MYSQLで次のような表を作成するためのSQLを教えてください。 (1)PLAYERS表のPID列はその表の主キー PLAYERS表(選手表) PID(選手ID) PANME(選手氏名)   M001    JUMBO OZAKI         M002    KING KAZU   M003    ANIKI KANEMOTO (2)RESULTS表のGIDとPID列はその表の複合キーであり、主キーになっている。 RESULTS表(成績表) GID(大会ID) PID(選手ID) SCORE(スコア) HIUCUP08    M001     72 HIUCUP08    M002     75 JPNCUP09    M001     70 JPNCUP09    M002     76 JPNCUP09    M003     68 (3)各々の表について設定されたデータのSQL のとき、次のようなSQL文を入力してもエラーが出ます。 (1)PLAYERSテーブル作成SQL ---------- CREATE TABLE PLAYERS ( PID char(4) NOT NULL, PNAME varchar(255) NOT NULL, PRIMARY KEY (PID) ); ---------- (2)RESULTSテーブル作成SQL ---------- CREATE TABLE RESULTS ( GID char(8) NOT NULL, PID char(4) NOT NULL, SCORE int(11) NOT NULL, PRIMARY KEY (GID,PID) ); ---------- (3)データ作成SQL <PLAYERSテーブル> ---------- INSERT INTO PLAYERS (PID, PNAME) VALUES ('M001', 'JUMBO OZAKI'), ('M002', 'KING KAZU'), ('M003', 'ANIKI KANEMOTO'); ---------- <RESULTSテーブル> ---------- INSERT INTO RESULTS (GID, PID, SCORE) VALUES ('HIUCUP08', 'M001', 72), ('HIUCUP08', 'M002', 75), ('JPNCUP09', 'M001', 70), ('JPNCUP09', 'M002', 76), ('JPNCUP09', 'M003', 68); ---------- なぜエラーが発生するのか教えてください。

    • ベストアンサー
    • MySQL
  • プログラミングについて

    PLAYERS表 PID(選手ID)  PNAME(選手氏名) M001       JUMBO OZAKI M002       KING KAZU 主キーは、PID で、プログラムを作成するのですがエラーが出ます。 create tabre PLAYERS ( PID char(4), PNAME varchar(15), primary key (PID) ); と、入力すると ERROR 1050 (42S01):table "players" already exists と表示されます。

    • ベストアンサー
    • MySQL
  • SQLについて

    Access2007 で次のような表を作成するためのSQLを教えてください。 PLAYERS表(選手表) PID(選手ID) PANME(選手氏名)   M001    JUMBO OZAKI         M002    KING KAZU   M003    ANIKI KANEMOTO また、テーブル作成をするときにSQLを入力することができません。入力するための方法も教えていただけるとありがたいです。

  • プログラミングの詳しい人へ

    MY SQLでプログラムを作成してますがうまくいきません。 PLAYERS表 ーーーーーーーーーーーーーーー l PID(選手ID)lPNAME(選手名)l lーーーーーーーーーーーーー--l  主キーはPID で、 create table PLAYERS ( PID char (4), PNAME varchar, primary key(PID) ); と入力するとエラーが出ます。 エラーメッセージは、 ERROR 1064(42000):You have an error in your SQL syntax,check the manual tthat corresponds to your my SQL server version for the right syntax to use near'primary key(PID) )' at line 4 と表示されます。 自分では、ちゃんと表の定義をして正しいと思うのですが?

    • ベストアンサー
    • MySQL
  • 2次元配列を複数項目でソートしたい

    開発環境:Visual Web Developer 2008 express 言語:Visual Basic 制限事項:Detatableの使用は禁止 目標: 2次元配列を複数項目でソートしたい。     (1)「科目名」で昇順ソート(ソート処理(1))   (2)「氏名」で昇順ソート(ソート処理(2))     (3)「実施日」で昇順ソート(ソート処理(3))     ※並べ替えた結果を利用して色々な処理を行いたいため、表示するコントロールなどに用意された機能は使わず、内部的に並べ替えるロジックを自分で書きたいと考えています。ソート処理(1)~(3)に書くロジックをお教えいただけると助かります。    Dim results(,) As String Dim i As Integer = 0     ReDim Preserve results(3, 11) '【武田茂・国語成績】 results(0, 0) = "国語" results(1, 0) = "武田茂" results(2, 0) = "1月10日実施" results(3, 0) = "86点" results(0, 1) = "国語" results(1, 1) = "武田茂" results(2, 1) = "2月10日実施" results(3, 1) = "21点" results(0, 2) = "国語" results(1, 2) = "武田茂" results(2, 2) = "3月10日実施" results(3, 2) = "51点" '【藤代慶介・国語成績】 results(0, 3) = "国語" results(1, 3) = "藤代慶介" results(2, 3) = "1月10日実施" results(3, 3) = "86点" results(0, 4) = "国語" results(1, 4) = "藤代慶介" results(2, 4) = "2月10日実施" results(3, 4) = "21点" results(0, 5) = "国語" results(1, 5) = "藤代慶介" results(2, 5) = "3月10日実施" results(3, 5) = "51点" '【武田茂・英語成績】 results(0, 6) = "英語" results(1, 6) = "武田茂" results(2, 6) = "1月10日実施" results(3, 6) = "86点" results(0, 7) = "英語" results(1, 7) = "武田茂" results(2, 7) = "2月10日実施" results(3, 7) = "21点" results(0, 8) = "英語" results(1, 8) = "武田茂" results(2, 8) = "3月10日実施" results(3, 8) = "51点" '【藤代慶介・英語成績】 results(0, 9) = "英語" results(1, 9) = "藤代慶介" results(2, 9) = "1月10日実施" results(3, 9) = "86点" results(0, 10) = "英語" results(1, 10) = "藤代慶介" results(2, 10) = "2月10日実施" results(3, 10) = "21点" results(0, 11) = "英語" results(1, 11) = "藤代慶介" results(2, 11) = "3月10日実施" results(3, 11) = "51点" '下記をキーとして、(1)から順に昇順ソートをかける '(1)科目名 'ソート処理(1) '(2)氏名 'ソート処理(2) '(3)実施日 'ソート処理(3) よろしくお願い致します。

  • mysql where句複数テーブル複数条件摘出

    こんにちわ。 mysqlを二日前から勉強し始めた超初心者者です。 まったくの初心者なので質問が的外れかもしれませんがよろしくお願い致します。 以下の三つのテーブルがあります。 t_seito ============================= id name comment created_at 11 赤井 あかい 0000-00-00 00:00:00 22 青葉 あおば 0000-00-00 00:00:00 33 白木 しらき 0000-00-00 00:00:00 ============================= m_kyouka ============== kyouka_id ky_name    1    国語    2    数学    3    理科    4    社会    5    英語 ============== t_score ===================== sc_id seito_id sckyouka_id score  1   11    1    50  2   22    1    80  3   33    1    23  4   11    2    94  5   22    2    43  6   33    2    67  7   11    3    13  8   22    3    76  9   33    3    59  10   11    4    78  11   22    4    40  12   33    4    35  13   11    5    64  14   22    5    87  15   33    5    30     ===================== この三つのテーブルをwhere句で結合させて 社会が50以上で英語が50点以下のデータを全て表示する。 という条件で摘出したいのですが・・・ select * from `m_kyouka`,`t_seito`,`t_score` where `kyouka_id`=`sckyouka_id` and `id`=`seito_id` and `kyouka_id`=4 and `score` >=50 and `kyouka_id`=5 and `score` <=50 と入力したところ ”返り値が空でした (行数 0)。 (Query took 0.0000 seconds.)” と表示されました。 いろいろとネットやら参考書などで調べてはいたのですが、 該当する条件がなかなか見つからず今回はじめて質問をさせていただきました。 何卒ご教授のほどよろしくお願い致します。

    • ベストアンサー
    • MySQL
  • ワードの表で並び替えができません

    お世話になります。 ワードの表で顧客名簿を作成しております。 氏名の列を選択して、罫線⇒並び替えを選んで、表示されるダイアログボックスで優先されるキーに氏名、種類に五十音、昇順、並べ替えの単位を段落にし、タイトル行ありにしてOKを押すと、1行目と2行目だけが並び替えられましたが、その他の行は並び替えられません。 どうすれば、全部が並び替えられるのでしょうか。 文字入力に誤りは無いと思いますが…。

  • エクセル 成績順に並べ変えたい

    エクセルの勉強中です。 添付のように成績表ができました。 表の活用段階ですが、氏名を成績の良い順に上から表示するには、どうすればよいのでしょうか。昇順/降順を使用するのでしょうが、その使用方法が解りません。教えて下さい。

  • VBAでもsort

    今、FOM出版のVBAの実践編を勉強中です。宜しくお願いします。 その中の「sort」メソッドでどうしても納得できず、前に進めない事があります。 構文:rangeオブジェクト.sort(kye1,order1,key2,order2,key3,order3,header) これは理解できるし、どこも省略せずに記入すればその通りに動くのですが orderは省略でき、省略した場合は昇順に並べ替えられると本には載っているのですが 私の記述はうまくいきません。 なぜ、こうなるのか教えてください。 B3  C3   D3 No.  氏名  住所 という表があり、氏名を昇順に並べようとしています。 構文通りに Range("B3").Sort key1:=Range("C3"), order1:=xlAscending, header:=xlyes とすれば問題なく Range("B3").Sort key1:=Range("C3"), header:=xlyes と記述すると、最初はうまくいきますが もう一度試そうと氏名欄を降順に並べ替え、それから実行すると動きません。 また、No.欄を昇順に並べ替えて実行するとちゃんと動き No.を降順に並べ替えて、氏名欄を昇順で並べ替えを実行すると氏名欄も降順で 並べ替えられてしまいます。 なぜ、こんな安定しない動きをするのかがわかりません。 初歩的な質問で申し訳ないのですが、どうしても気になって先に進めないので どうぞ教えてください。 ちなみに、もう一度試そうとNo.欄を並べ替える時は、エクセルの昇順降順アイコンで 並べ替えています。これが問題なのでしょうか?