この sqlfiddle リンクは、呼び出し間で状態を保持しているようです: http://sqlfiddle.com/#!2/125bc/1
これには、mysql の次のスキーマが含まれています。
CREATE TABLE if not exists `standings` (
`teamid` int(11) NOT NULL,
`win` decimal(23,0) default NULL,
`tie` decimal(23,0) default NULL,
`lose` decimal(23,0) default NULL,
PRIMARY KEY (`teamid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
INSERT INTO `standings` (`teamid`, `win`, `tie`, `lose`) VALUES
(1, 3, 0, 0),
(2, 1, 1, 1),
(3, 1, 1, 1),
(4, 0, 0, 3);
CREATE TABLE if not exists `newscores` (
`recordid` int(11) NOT NULL auto_increment,
`teamid` int(11) NOT NULL,
`gameid` int(11) NOT NULL,
`totalstrokes` int(11) NOT NULL,
primary key (recordid)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;
INSERT INTO `newscores` (`recordid`, `teamid`, `gameid`, `totalstrokes`) VALUES
(5, 1, 1, 145),
(6, 2, 1, 105),
(7, 5, 1, 145),
(8, 6, 1, 155);
およびこれらの 2 つのクエリ:
Insert into standings (teamid, win, tie, lose) (SELECT g1.teamid, SUM( IF( g1.totalstrokes < g2.totalstrokes, 1, 0 ) ) AS win, SUM( IF( g1.totalstrokes = g2.totalstrokes, 1, 0 ) ) AS tie, SUM( IF( g1.totalstrokes > g2.totalstrokes, 1, 0 ) ) AS lose
FROM newscores g1
JOIN newscores g2 ON g1.gameid = g2.gameid
AND g1.teamid != g2.teamid
GROUP BY g1.teamid)
on duplicate key
update win = win + values(win),
lose = lose + values(lose),
tie = tie + values(tie);
select * from standings;
standings
次の表が表示されます。
teamid win tie lose
1 4 1 1
2 4 1 1
3 1 1 1
4 0 0 3
5 1 1 1
6 0 0 3
そして、初めて実行されます。(URL を新しいウィンドウに貼り付けて) 2 回目に実行すると、チーム ID 1、2、5、6 の値の一部が増分されます。
スキーマを編集して「テーブルの作成」を「存在しない場合のテーブルの作成」に変更するか、その逆に変更するか、「テーブルの削除」ステートメントを含めることで、リセットできます。しかし、これは非常に奇妙に思えます。
PS この質問に sqlfiddle タグを追加したよりも、誰かがより有意義であればありがたいです。