- ベストアンサー
サブクエリとDISTINCTGROUPBYの併用は不可??
SQLで副で問い合わせたときグループバイやDISTINCTがエラーになってしまいます。 何故なのか検討がつきません。 同じデータを持つ様々なデータベースでやってますがどれもエラーになります。 オラクルやMYSQLやpostgreSQLです。 SELECT * FROM TableName WHERE 担当 IN (SELECT 担当 FROM TableName WHERE 売上品 = '竹輪') AND 担当 IN (SELECT 担当 FROM TableName WHERE 売上品 = '胡瓜') AND 売上品 IN ('竹輪','胡瓜') ; これは普通に出来ます。 これに対して… SELECT distinct 担当, 商品, 売上品 from…かGroup By 担当, 商品とやっても何故かエラーが出ます… 何か間違ってますでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
SELECT 担当, 商品, count(*) FROM TableName WHERE 担当 IN (SELECT 担当 FROM TableName WHERE 売上品 = '竹輪') AND 担当 IN (SELECT 担当 FROM TableName WHERE 売上品 = '胡瓜') AND 売上品 IN ('竹輪','胡瓜') GROUP BY 担当, 商品 ; とか普通に通ると思いますけど? ・DISTINCTが、他の何かと矛盾する。 ・GROUP BYが、他の何かと矛盾する。 のだと思いますよ。 ちなみに、担当 IN (SELECT 担当 FROM TableName WHERE 売上品 = '竹輪') のような WHEREに指定するメンバーシップ検査が、GROUP BYやDISTINCTの邪魔はしません。
その他の回答 (1)
- 3rd_001
- ベストアンサー率66% (115/174)
とりあえず、エラーコードを載せましょう。 また、再現するコードを載せましょう。 > SELECT distinct 担当, 商品, 売上品 > from…か > Group By 担当, 商品 > とやっても何故かエラーが出ます これをみるかぎりだと、select とgroup byの項目が あっていないだけに見えますが? こんな感じ? >select distinct empno,ename ,count(*) from emp group by empno > * >行1でエラーが発生しました。: >ORA-00979: GROUP BYの式ではありません。 このORA-xxxxが重要です。このエラーコードがわからない限り、何のエラーだか第三者にはわかりません。 根本の問題として、distinctとgroup byの使用目的は異なります。 ・distinctは重複を省く。 ・group byは集計を行う。 目的(仕様)をはっきりさせれば、おのずと使用するsqlは決まります。