SQL文で年やleague_idごとの順位表を作成する方法

このQ&Aのポイント
  • データベース内のデータを年やleague_idごとに分類し、順位表を作成するには、SQL文を使用します。
  • まず、teamテーブルとtaisenテーブルを作成します。
  • teamテーブルにはチームの情報を、taisenテーブルには試合結果を格納します。
回答を見る
  • ベストアンサー

SQL文にて順位表をつくりたい

create table team(team_id int not null primary key,team_name varchar(30),year int(4), leagueid int(32) ); insert into team values(1,"A",2012,1),(2,"B",2012,1),(3,"C",2012,1),(4,"D",2012,1),(5,"A",2012,2),(6,"B",2012,2),(7,"C",2012,2),(8,"D",2012,2),(9,"A",2011,1),(10,"B",2011,1),(11,"C",2011,1),(12,"D",2011,1); create table taisen(id int not null primary key auto_increment,hometeam int,homepoint int,awayteam int,awaypoint int); insert into taisen (hometeam,homepoint,awayteam,awaypoint) values(1,3,2,2),(3,1,4,0),(1,0,3,2),(2,2,4,2),(1,1,4,2),(2,0,3,0),(2,1,1,2),(4,1,3,3),(3,5,1,2),(5,3,6,3),(5,1,7,1),(7,1,8,1),(9,1,10,1),(11,1,12,3); データベース内にデータがあったときに年やleague_idごとに順位表を作りたいのですが、どのようにSQL文を書いてよいかわからず困っています。 理想はこのような感じです。 http://soccer.yahoo.co.jp/ws/standing/?l=52 お分かりの方がいらっしゃいましたらご教授お願いいたします。

  • MySQL
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

>まだ試合をおこなっていないチームもランク付けしたいのですが、 ではまず、teamテーブルの、2012年1リーグEチームを登録します insert into team values(13,'E',2012,1); //v1を作り直します。(すでにある場合は削除してください) create view v1 as select id,hometeam as team_id ,case when homepoint>awaypoint then 3 when homepoint = awaypoint then 1 else 0 end as wp ,if(homepoint>awaypoint,1,0) as w ,if(homepoint=awaypoint,1,0) as d ,if(homepoint<awaypoint,1,0) as l ,homepoint as tokuten ,awaypoint as sitten ,team_name,year ,leagueid from taisen inner join team on team.team_id=hometeam union all select id,awayteam as team_id ,case when homepoint<awaypoint then 3 when homepoint = awaypoint then 1 else 0 end ,if(homepoint<awaypoint,1,0) ,if(homepoint=awaypoint,1,0) ,if(homepoint>awaypoint,1,0) ,awaypoint ,homepoint ,team_name,year ,leagueid from taisen inner join team on team.team_id=awayteam union all select null,team_id,0,0,0,0,0,0,team_name,year,leagueid from team left join taisen on taisen.hometeam=team.team_id or taisen.awayteam=team.team_id where taisen.id is null //v2を少しいじります。(すでにあるものは削除) create view v2 as select team_id,year,leagueid,team_name ,sum(wp) as wp ,count(id) as count ,sum(w) as w ,sum(d) as d ,sum(l) as l ,sum(tokuten) as tokuten ,sum(sitten) as sitten ,sum(tokuten) - sum(sitten) as tokusitten from v1 group by team_id,year,leagueid; //この状態で、前回のSQLを走らせます select year,leagueid, (select count(*)+1 from v2 as v2b where 1 and v2a.year=v2b.year and v2a.leagueid=v2b.leagueid and (0 or v2a.wp<v2b.wp or v2a.wp=v2b.wp and v2a.w<v2b.w or v2a.wp=v2b.wp and v2a.w=v2b.w and v2a.tokuten<v2b.tokuten or v2a.wp=v2b.wp and v2a.w=v2b.w and v2a.tokuten=v2b.tokuten and v2a.tokusitten<v2b.tokusitten ) ) as rank,team_id,team_name ,wp,count,w,d,l,tokuten,sitten,tokusitten from v2 as v2a order by year,leagueid,rank; ※2012年1リーグの5位にチームEが表示されます

h199613
質問者

お礼

yambejp 様 度重なる質問に対し、ご回答有難う御座います。 できました!! 本当に有難う御座います。 本当に助かりました。 次は総当り表を実装予定ですが、またわからないことがありましたらご教授お願いできればと思います。 本当に有難うございました。

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

あら、まだこの課題でつまってましたか・・・ 面倒なのでviewを使って処理してみました。 もとのデータの持ち方が非効率なのでこのくらいが限界かなと。 //ホームチーム、アウェイチーム関係なくとりあえずビューにまとめる create view v1 as select id,hometeam as team_id ,case when homepoint>awaypoint then 3 when homepoint = awaypoint then 1 else 0 end as wp ,if(homepoint>awaypoint,1,0) as w ,if(homepoint=awaypoint,1,0) as d ,if(homepoint<awaypoint,1,0) as l ,homepoint as tokuten ,awaypoint as sitten ,team_name,year ,leagueid from taisen inner join team on team.team_id=hometeam union all select id,awayteam as team_id ,case when homepoint<awaypoint then 3 when homepoint = awaypoint then 1 else 0 end ,if(homepoint<awaypoint,1,0) ,if(homepoint=awaypoint,1,0) ,if(homepoint>awaypoint,1,0) ,awaypoint ,homepoint ,team_name,year ,leagueid from taisen inner join team on team.team_id=awayteam; //ビュー1から集計したビュー2を作成 create view v2 as select team_id,year,leagueid,team_name ,sum(wp) as wp ,count(*) as count ,sum(w) as w ,sum(d) as d ,sum(l) as l ,sum(tokuten) as tokuten ,sum(sitten) as sitten ,sum(tokuten) - sum(sitten) as tokusitten from v1 group by team_id,year,leagueid; ※ここまでビューは一回作ってしまえば2回目からは作成する必要はありません //順位つき勝敗表 select year,leagueid, (select count(*)+1 from v2 as v2b where 1 and v2a.year=v2b.year and v2a.leagueid=v2b.leagueid and (0 or v2a.wp<v2b.wp or v2a.wp=v2b.wp and v2a.w<v2b.w or v2a.wp=v2b.wp and v2a.w=v2b.w and v2a.tokuten<v2b.tokuten or v2a.wp=v2b.wp and v2a.w=v2b.w and v2a.tokuten=v2b.tokuten and v2a.tokusitten<v2b.tokusitten ) ) as rank,team_id,team_name ,wp,count,w,d,l,tokuten,sitten,tokusitten from v2 as v2a order by year,leagueid,rank; ※ランクの根拠は「勝ち点順>勝ち数順>得点順>得失点順」にしてあります。 当該個所を修正すればランクの調整ができると思います。 ※今回の例だと2011年のリーグ2はID=9のAチームとID=10のBチームは 勝ち点、勝ち数、得点、得失点ともにおなじなので同じ順位になります。

h199613
質問者

お礼

yambejp 様 有難う御座います。 まだ解決しておらず、放置状態のままでした・・ とても助かりました。 本当に有難う御座います。 再度ご質問なのですが、 上記の場合、試合をおこなったチームの場合対象になっておりますが、 まだ試合をおこなっていないチームもランク付けしたいのですが、 どのようにしたらよろしいでしょうか? 度重なる質問で大変申し訳御座いませんが、宜しくお願いいたします。

関連するQ&A

  • tableの連結

    http://okwave.jp/qa/q7944235.html の件に引き続きどうSQL文を書いてよいかわからず困っています。 create table team(team_id int not null primary key,team_name varchar(30),year int(4), leagueid int(32) ); insert into team values(1,"A",2012,1),(2,"B",2012,1),(3,"C",2012,1),(4,"D",2012,1),(5,"A",2012,2),(6,"B",2012,2),(7,"C",2012,2),(8,"D",2012,2),(9,"A",2011,1),(10,"B",2011,1),(11,"C",2011,1),(12,"D",2011,1); create table taisen(id int not null primary key auto_increment,hometeam int,homepoint int,awayteam int,awaypoint int); insert into taisen (hometeam,homepoint,awayteam,awaypoint) values(1,3,2,2),(3,1,4,0),(1,0,3,2),(2,2,4,2),(1,1,4,2),(2,0,3,0),(2,1,1,2),(4,1,3,3),(3,5,1,2),(5,3,6,3),(5,1,7,1),(7,1,8,1),(9,1,10,1),(11,1,12,3); とあり、 taisen.hometeamとteam.idとtaisen.awayteamとteam.idを結合し、taisenテーブルにteamのyear、leagueid、team_nameが表示されればと思っています。 通常のjoinであればできるのですが、どのようにsql文をかけばよいのかわからず困っています。 taisen.hometeamとteam.idとtaisen.awayteamとteam.idを結合したときに | taisen.hometeam | ホームチーム名 | taisen.homepoint | taisen.awayteam | アウェイチーム名 | taisen.awaypoint | team.year | team.leagueid で結果がとれるようにしたいのですが、どのようにしたらよろしいでしょうか?

    • ベストアンサー
    • MySQL
  • 総当り表

    以前にご質問させていただきましたが、時間が経ってしまったため、再度ご質問させていただきました。 create table team(team_id int not null primary key,team_name varchar(30),year int(4), leagueid int(32) ); insert into team values (1,"A",2012,1), (2,"B",2012,1), (3,"C",2012,1), (4,"D",2012,1), (5,"A",2012,2), (6,"B",2012,2), (7,"C",2012,2), (8,"D",2012,2), (9,"A",2011,1), (10,"B",2011,1), (11,"C",2011,1), (12,"D",2011,1); create table taisen(id int not null primary key auto_increment,hometeam int,homepoint int,awayteam int,awaypoint int); insert into taisen (hometeam,homepoint,awayteam,awaypoint) values (1,3,2,2), (3,1,4,0), (1,0,3,2), (2,2,4,2), (1,1,4,2), (2,0,3,0), (2,1,1,2), (4,1,3,3), (3,5,1,2), (5,3,6,3), (5,1,7,1), (7,1,8,1), (9,1,10,1), (11,1,12,3); 上記のデータを使用し、下記の参考サイトの戦績表みたいな作成を考えております。 http://match.nadeshikoleague.jp/2013/nadeshiko_cup_a/match/fight.html 参考サイトですと1チームに対し、2試合ずつになっていますが、1試合を考えております。 SQL文で対戦したデータの呼び出しはできていると思います。 SELECT t.team_id, t.year, t.team_name AS hometeamname, t.leagueid, ti.homepoint, ti.awaypoint, t1.team_name AS awayteamname FROM team AS t1 INNER JOIN (team t INNER JOIN taisen ti ON t.team_id = ti.hometeam) ON t1.team_id = ti.awayteam WHERE t.`year` = '2012' AND t.`leagueid` = 1 上記でうけとったデータにて総当り表を作成したいのですが、 PHPでどのように記述したらよろしいでしょうか? サンプルコードなどいただけると幸いです。 また、対戦していないところに関しては「-」というのを入れたいです。 お分かりの方が、いらっしゃいましたらご教授お願いします

    • ベストアンサー
    • PHP
  • 指定された趣味を持つメンバーがいるグループを抽出するSQL

    グループテーブル、メンバーテーブル、趣味テーブルの3つのテーブルがあります。 あるメンバーはあるグループに属しており、趣味を1つ持っています。 以下がそのSQLです。 CREATE TABLE groups ( g_id int primary key ); CREATE TABLE members ( m_id int primary key , g_id int , h_id int ); CREATE TABLE hobbies ( h_id int primary key, h_name text ); INSERT INTO groups VALUES ( 1 ); INSERT INTO groups VALUES ( 2 ); INSERT INTO groups VALUES ( 3 ); INSERT INTO members VALUES ( 1, 1, 1); INSERT INTO members VALUES ( 2, 1, 3); INSERT INTO members VALUES ( 3, 1, 4); INSERT INTO members VALUES ( 4, 1, 4); INSERT INTO members VALUES ( 5, 2, 1); INSERT INTO members VALUES ( 6, 2, 2); INSERT INTO members VALUES ( 7, 2, 3); INSERT INTO members VALUES ( 8, 3, 2); INSERT INTO members VALUES ( 9, 3, 3); INSERT INTO members VALUES ( 10, 3, 4); INSERT INTO hobbies VALUES ( 1, 'sports' ); INSERT INTO hobbies VALUES ( 2, 'music' ); INSERT INTO hobbies VALUES ( 3, 'book' ); INSERT INTO hobbies VALUES ( 4, 'drive' ); 指定された趣味を持つメンバーがいるグループを抽出するにはどうすればいいでしょうか? 例えば、「読書が趣味なメンバーとドライブが趣味なメンバーがいるグループは?」「グループ1とグループ3」のような感じです。 一応自分で考えてみたのが、以下ですが、これだと趣味の指定が増減すると大きくSQLが変わってしまいます。 もっといいやり方はないでしょうか? 私はPostgreSQL8を使ってますが、汎用的なSQLであれば、そっちの方がいいです。 SELECT distinct m.g_id FROM members m join hobbies h ON m.h_id = h.h_id where h.h_name = 'drive' INTERSECT SELECT distinct m.g_id FROM members m join hobbies h ON m.h_id = h.h_id where h.h_name = 'book';

  • POSTGRESQLデフォルトのシーケンス値を強制

    以下の(2)(3)のaをデフォルトであるシーケンスの値を強制入力しエラーを回避する方法はありますか? create sequence testseq start 1; create table test(a int not null default nextval('testseq'), b int); --(1)成功 insert into test (b) values(0); --(2)エラー insert into test (a,b) values(null,0); --(3)エラー insert into test values(null,0);

  • 存在しないレコードの抽出方法について

    table_aに存在するidのうち、table_bには存在しないidを抽出するSLQ文を作成したいと思ったのですが、抽出方法が分からなかったので、アドバイスいただける方がいらっしゃいましたら、ご教示いただけたらと思います。 下記の例では、table_aには、101~106までのidがあるのに対し、table_bには101,102,104のidがあるため、103,105,106を抽出したいと思います。 CREATE TABLE IF NOT EXISTS `table_a` ( `auto_id` int(11) NOT NULL, `id` varchar(7) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8; INSERT INTO `table_a` (`auto_id`, `id`) VALUES (1, '101'), (2, '102'), (3, '103'), (4, '104'), (5, '105'), (6, '106'); CREATE TABLE IF NOT EXISTS `table_b` ( `auto_id` int(11) NOT NULL, `id` varchar(7) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8; INSERT INTO `table_b` (`auto_id`, `id`) VALUES (1, '101'), (2, '102'), (3, '102'), (4, '102'), (5, '104'), (6, '104'); 以上、よろしくお願いします。

    • ベストアンサー
    • MySQL
  • Using temporary; Using filesort を回避したい

    はじめまして。よろしくお願いします。 下記の場合、Using temporary; Using filesort を回避するには どうしたらよいでしょうか。 次の 2 つのテーブルがあります。 CREATE TABLE `test1` ( `f1` int(11) NOT NULL, `f2` int(11) NOT NULL, PRIMARY KEY (`f1`,`f2`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `test1` VALUES ('1', '2'); INSERT INTO `test1` VALUES ('1', '3'); INSERT INTO `test1` VALUES ('1', '4'); INSERT INTO `test1` VALUES ('2', '1'); INSERT INTO `test1` VALUES ('2', '3'); CREATE TABLE `test2` ( `f1` int(11) NOT NULL, `f2` varchar(20) default NULL, `f3` varchar(20) default NULL, PRIMARY KEY (`f1`), KEY `ix_f2_f3` (`f2`,`f3`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `test2` VALUES ('1', 'A', 'a'); INSERT INTO `test2` VALUES ('2', 'B', 'b'); INSERT INTO `test2` VALUES ('3', 'C', 'c'); INSERT INTO `test2` VALUES ('4', 'D', 'd'); 次の SELECT を実行すると Using temporary; Using filesort が 現れてしまいます。 explain select test2.f2, test2.f3 from test1, test2 where test1.f1 = 1 and test1.f2 = test2.f1 order by test2.f2, test2.f3; order by ... をなくすと問題ないのですが、ソートは必要です。 複数のキーに対してORDER BYを実行する場合 インデックスを使用できないとあるので ix_f2_f3 は使用されず Using filesort となるのはわかるのですが、 Using temporary となる理由と回避方法がわかりません。 ご教示よろしくおねがいいたします。

  • SQL文について

    SQLite バージョン3.7.10 を使用しています。 次のようなテーブル構造で、 PRAGMA foreign_keys = ON; CREATE TABLE t1 ( key TEXT PRIMARY KEY NOT NULL, name TEXT NOT NULL UNIQUE ); INSERT INTO t1 (key, name) VALUES ('t1_key1', 't1_name1'); INSERT INTO t1 (key, name) VALUES ('t1_key2', 't1_name2'); CREATE TABLE t2 ( key TEXT PRIMARY KEY NOT NULL, name TEXT NOT NULL UNIQUE ); INSERT INTO t2 (key, name) VALUES ('t2_key1', 't2_name1'); INSERT INTO t2 (key, name) VALUES ('t2_key2', 't2_name2'); CREATE TABLE t3 ( key TEXT PRIMARY KEY NOT NULL, name TEXT NOT NULL UNIQUE ); INSERT INTO t3 (key, name) VALUES ('t3_key1', 't3_name1'); INSERT INTO t3 (key, name) VALUES ('t3_key2', 't3_name2'); CREATE TABLE t4 ( year TEXT NOT NULL, t1_key TEXT NOT NULL, t3_key TEXT NOT NULL, percent INTEGER NOT NULL, UNIQUE(year, t1_key, t3_key), FOREIGN KEY(t1_key) REFERENCES t1(key) ON DELETE CASCADE, FOREIGN KEY(t3_key) REFERENCES t3(key) ON DELETE CASCADE ); INSERT INTO t4 (year, t1_key, t3_key, percent) VALUES ('2011', 't1_key1', 't3_key1', 10); INSERT INTO t4 (year, t1_key, t3_key, percent) VALUES ('2012', 't1_key2', 't3_key2', 50); INSERT INTO t4 (year, t1_key, t3_key, percent) VALUES ('2012', 't1_key2', 't3_key1', 100); CREATE TABLE t5 ( no INTEGER PRIMARY KEY AUTOINCREMENT, date TEXT NOT NULL, t1_key TEXT NOT NULL, t2_key TEXT NOT NULL, t3_key TEXT NOT NULL, amount INTEGER NOT NULL, FOREIGN KEY(t1_key) REFERENCES t1(key) ON DELETE CASCADE, FOREIGN KEY(t2_key) REFERENCES t2(key) ON DELETE CASCADE, FOREIGN KEY(t3_key) REFERENCES t3(key) ON DELETE CASCADE ); INSERT INTO t5 (date, t1_key, t2_key, t3_key, amount) VALUES ('2011-01-01', 't1_key1', 't2_key1', 't3_key1', 3000); INSERT INTO t5 (date, t1_key, t2_key, t3_key, amount) VALUES ('2011-02-02', 't1_key2', 't2_key1', 't3_key1', 2000); INSERT INTO t5 (date, t1_key, t2_key, t3_key, amount) VALUES ('2012-01-01', 't1_key2', 't2_key1', 't3_key1', 5000); 例えばテーブル「t5」から、 dateカラム=’2011’ t1_keyカラム= (テーブル「t1」のt1_nameカラム=’t1_name1’のt1_key1) t2_keyカラム= (テーブル「t2」のt2_nameカラム=’t2_name1’のt2_key1) という条件の含まれてる全ての対応する行に、 テーブル「t4」のpercentカラムとテーブル「t5」のamountカラムを 掛け合わせた数値の合計を出力する。 ただしテーブル「t4」に対応するt1_keyとt3_keyがなければ、 percentを「0」としてamountと掛ける。 例えばこの条件だと '2011-01-01'と'2011-02-02'の2つの行のamountの合計を求めることになりますが、 '2011-01-01'の方は、テーブル「t4」にpercent「10」があるので 3000×(10/100)=300 '2011-02-02'の方は、テーブル「t4」にpercentがない(対応する行がない)ので 2000×(0/100)=0 合計 300+0=300 という結果が得たいです。 これはどのようなSQL文になるのでしょうか?

  • PHP+MYSQL IF文の初歩

    全く初歩の質問で申し訳ございません。 create table test (shohin char(40),uri int(10) ,kai int(10) ,urikai char(40)); insert into test values('りんご',300,200,'黒字'); insert into test values('みかん',500,300,null); insert into test values('ぶどう',null,null,'未入荷'); で 「みかん」のレコードが、uri > kai なら 「みかん」のurikaiを'黒字'にする方法を IF文でどのように書けばよいのかを教えてください。

    • ベストアンサー
    • PHP
  • どなたか教えてください。

    どなたかお分かりの方がいらっしゃいましたらご教授お願いします。 本当に困っております。 create table team(team_id int not null primary key,team_name varchar(30),year int(4), leagueid int(32) ); insert into team values(1,"A",2012,1),(2,"B",2012,1),(3,"C",2012,1),(4,"D",2012,1),(5,"A",2012,2),(6,"B",2012,2),(7,"C",2012,2),(8,"D",2012,2),(9,"A",2011,1),(10,"B",2011,1),(11,"C",2011,1),(12,"D",2011,1); create table taisen(id int not null primary key auto_increment,hometeam int,homepoint int,awayteam int,awaypoint int); insert into taisen (hometeam,homepoint,awayteam,awaypoint) values(1,3,2,2),(3,1,4,0),(1,0,3,2),(2,2,4,2),(1,1,4,2),(2,0,3,0),(2,1,1,2),(4,1,3,3),(3,5,1,2),(5,3,6,3),(5,1,7,1),(7,1,8,1),(9,1,10,1),(11,1,12,3); select (select count(*)+1 from ( select team_id ,sum((homepoint>awaypoint)*3 +(homepoint=awaypoint)) as 勝ち点 ,sum(homepoint) - sum(awaypoint) as 得失点差 ,sum(homepoint) as 得点 from ( select hometeam as team_id,homepoint,awaypoint from taisen union all select awayteam as team,awaypoint,homepoint from taisen ) as sub1 group by team_id ) as sub2 where 勝ち点>(@a:=coalesce(sum((homepoint>awaypoint)*3 +(homepoint=awaypoint)),0)) or ( 勝ち点=@a and 得失点差>@b:=coalesce((sum(homepoint) - sum(awaypoint)),0)) or ( 勝ち点=@a and 得失点差=@b and 得点>coalesce(sum(homepoint),0)) ) as 順位 ,year 年度 ,leagueid リーグID ,team_name チーム名 ,coalesce(sum((homepoint>awaypoint)*3 +(homepoint=awaypoint)),0) as 勝ち点 ,coalesce(count(sub.team_id),0) as 試合数 ,coalesce(sum(homepoint>awaypoint),0) as 勝ち数 ,coalesce(sum(homepoint=awaypoint),0) as 引き分け ,coalesce(sum(homepoint<awaypoint),0) as 負け数 ,coalesce(sum(homepoint),0) as 得点 ,coalesce(sum(awaypoint),0) as 失点 ,coalesce(sum(homepoint) - sum(awaypoint),0) as 得失点差 from ( select hometeam as team_id,homepoint,awaypoint from taisen union all select awayteam as team,awaypoint,homepoint from taisen ) as sub right join team on sub.team_id=team.team_id where team.year = 2012 and team.leagueid = 2 group by team.team_id order by 勝ち点 desc, 得失点差 desc, team.team_id asc; とした場合、順位が5位からの表示になってしまいます。 これを1位からの表示にしたいのですが、どのように変更したらよいのかわからず困っており、whereのteam.yearとteam.league.idを変更するたびに順位をリセット(?)する方法を知りたいです。 お分かりの方がいらっしゃいましたらご教授お願いします。

    • 締切済み
    • PHP
  • sqlスクリプトエラーその2について

    以下のコマンドを実行するとtrueのところでエラーになります。 以前実行したときはうまくいったのですが原因がよくわかりません。 C:\>mysql\bin\mysqladmin -u root -p CREATE sample2 Enter password: **** C:\>mysql\bin\mysql -u root -p sample2 < c:\database.sql Enter password: **** ERROR 1054 at line 22: Unknown column 'true' in 'field list' <database.sql>-- ユーザを表すテーブル create table schedule_user ( id integer primary key, -- ユーザID name text not null, -- 名前 mailaddress text not null, -- メールアドレス password text not null); -- パスワード -- 予定を表すテーブル create table schedule ( id integer primary key, -- 予定ID user_id integer not null, -- この予定を入れたユーザのユーザID subject text not null, -- 予定の題名 content text not null, -- 予定の内容 start_time timestamp not null, -- 予定の開始日時 end_time timestamp not null, -- 予定の終了日時 place text, -- 予定の場所 comment text, -- 予定のコメント is_publish bool not null); -- 予定の公開/非公開フラグ -- テスト用のデータ insert into schedule_user values(1, 'itboost','motomatu@itboost.co.jp', 'itboost'); insert into schedule values(1, 1, '予定1', '予定1です', '2003-01-01 10:00', '2003-01-01 10:30', 'A社', '予定1のコメントです。', true); insert into schedule values(2, 1, '予定2', '予定2です', '2003-01-01 10:00', '2003-01-02 10:30', 'B社', '予定2のコメントです。', false); insert into schedule values(3, 1, '予定3', '予定3です', '2003-01-01 20:00', '2003-01-03 22:30', 'C社', '予定3のコメントです。', true); ご教授よろしくおねがいします。