ラムネグから一言:寝る前に読むとくだらなすぎて逆に寝れると好評なすごい適当なブログをこっちではじめてます.
タイトルまんまですが、MySQLで別のテーブルでの計算結果、例えば合計とか平均とかをグループごとに求めて、その値でこっちの更新したいテーブルのそのグループを代表?するレコードに値を入れる方法を。
- えーと、どういうコト?
-
例がないと分かりづらいですよね。今回紹介するのはこんなイメージ。
テーブルAがスマホゲームのカテゴリテーブル。「RPG」とか「パズル」とかが入ってる。で、そこにはそのカテゴリ(ジャンル)の総売上高みたいなカラムがある。
んで、テーブルBがゲームタイトル自体のテーブル。ドラゴンクエストとかFF、ぷよぷよとかが入ってる、そこにはゲームタイトルごとの売上が入ってるカラムがある。
んでこのテーブルAの総売上高に、テーブルBを使ってカテゴリごとのゲームの売上をgroup byしてやって合計(SUM)して、全カテゴリ分一発でupdateする方法、です。
…ただ普通はこれ、やらんでいいですよね。都度計算すればいいから、わざわざテーブルAに総売上高カラム作る必要あるのかっていう…。
やりかた
UPDATE tableA
INNER JOIN(
SELECT category_id, sum(uriage) AS uriage_goukei FROM tableB GROUP BY category_id
) AS temp_table
ON tableA.id = temp_table.category_id
SET tableA.souuriage = uriage_goukei;
コレでおっけー。
このSQLを実行すればテーブルAの総売上カラム全部にテーブルBで計算した売上合計が入ります。複数行まとめてupdateできるのってなんかスマートでカッコいいですよね。
INNER JOINにしてるんでゲームタイトルが1個もないジャンルとかだと値が入らないのだけ注意。
コツというかなるほど!と思うのは、グループにして合計求めて、んであたかもその計算結果とカテゴリidのみの新しいテーブルを作った感じ(temp_table)で、それとテーブルAとを結合してる所。
まとめ
MySQLで違うテーブルで求めた計算結果を使い、複数行まとめて値を更新する方法を紹介しました。
参考にしてみてくださいね。
【おしらせ、というか完全なる宣伝】
文体がもうぜんぜん適当すぎてあれだけどものすごい自由に書いてるブログ「檸檬だくだく」もよろしく.寝る前に読める恐ろしくくだらないやつです.
こんなにも一ミリも目を引かれないタイトルを取り扱ってます: ココア20g / ハイチュウとかってさ / なぜ米と小麦を食べようと思ったのかの謎 /