質問: Y.カラーコード ``` カラーコード毎の総重量を求めるために同じようなサブクエリを同士LEFT JOINしています。 この同じようなクエリをすっきりさせて求める結果を出す方法はないでしょうか。 ``` SELECT X.*, SELECT SUM(重量) ~~ ``` みたいな感じで同じようなサブクエリをJOINせずにできないかと思って色々試しましたがうまくいきませんでした。 このやり方でしか出せないでしょうか。 またWITH区は使わない方法でお願いします。 このSQLは実際には実行していないのでエラーが出るかもしれないことをご了承ください。
回答: MySQL 8.0.20 での場合ですが、「カラーコード」と「重量」でグルーピングを行って、総重量は Window 関数で求めます。 ``` SELECT `カラーコード`, `重量`, ROUND( SUM(SUM(`重量`)) OVER (PARTITION BY `カラーコード`), 1) AS `カラーコード毎の総重量` FROM `在庫` WHERE `アイテムコード` IN (SELECT `アイテムコード` FROM `アイテムマスタ` WHERE `分類` = '塗料') GROUP BY `カラーコード`, `重量`; +--------------------+--------+-----------------------------------+ | カラーコード | 重量 | カラーコード毎の総重量 | +--------------------+--------+-----------------------------------+ | 100 | 1.2 | 4.7 | | 100 | 3.5 | 4.7 | | 300 | 1.8 | 1.8 | +--------------------+--------+-----------------------------------+ ```