質問: 'a') UNION select a.id, a.a_data1, a.b_data1 from table_join a where a.year >= 2015 ``` ### 試したこと sqlに関して、やりたいことを検索し、MYSQL_workbenchなどでデバッグしてみた。 ### 環境 MySQL workbench 8.0.19
回答: 1に対して、集計するというのがクエリーでは実現されていません。 **union**は**マージ**する機能で**集計**ではありません。 件数については、クエリーの性能を気にされていると思いますが、それは正しいクエリーであると同時に、インデックスも適切でなければなりません。 2について、table_joinとlink_tableの関係はidで1:n(※)なのでしょう。 これに対し、yearとtagではn:nになるので、件数が変わるのは当然です。 ※テーブルが分かれているのが正しいなら1:nですが、1:1なら正規化されている状態ではありません。 やりたい事は概ね以下の様なSQLだと思います。 ``` select a.year, a.tag, sum(a_data1), sum(b_data2), sum(b_data1), sum(b_data2) from table_join a inner join link_table c on a.id=c.id where c.file_name = 'ほげほげ.xlsx' and c.sheet_name = 'a' and c.year >= 2015 group by a.year, a.tag ```