SQLなのですが、どこが間違っているか分かりません。どなたかご教示いただけませんでしょうか?SELECT SHOHIN_MST.CATEGORY,ZAIKO_TRN.TAISHO_YM, ROUND(AVG(ZAIKO_TRN.ZAIKO_NUM), 2) FROM SHOHIN_MST LEFT JOIN ZAIKO_TRN ON SHOHIN_MST.SHOHIN_ID = ZAIKO_TRN.SHOHIN_ID GROUP BY SHOHIN_MST.CATEGORY ORDER BY SHOHIN_MST.CATEGORY ASC;

1件の回答

回答を書く

1139007

2026-02-05 12:35

+ フォロー

間違っているのは、SELECT句に書いている「ZAIKO_TRN.TAISHO_YM」がGROUP BYに含まれていない点です。

AVGで集計しているのに、集計していない列(TAISHO_YM)をそのままSELECTしているため、多くのデータベースではエラーになる設定になっています。

やりたいことが「カテゴリ × 対象年月ごとの在庫平均」なら、次のようにTAISHO_YMもGROUP BYに含めてください。

GROUP BY SHOHIN_MST.CATEGORY, ZAIKO_TRN.TAISHO_YM
ORDER BY SHOHIN_MST.CATEGORY ASC, ZAIKO_TRN.TAISHO_YM ASC

逆に「カテゴリごとの在庫平均」だけが欲しいなら、SELECT句からTAISHO_YMを削除して、

SELECT SHOHIN_MST.CATEGORY,
ROUND(AVG(ZAIKO_TRN.ZAIKO_NUM), 2)


のように書く必要があります。

うったえる有益だ(0シェアするブックマークする

関連質問

Copyright © 2026 AQ188.com All Rights Reserved.

博識 著作権所有