こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

サブクエリと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 担当, 商品とやっても何故かエラーが出ます…
何か間違ってますでしょうか?

投稿日時 - 2008-08-06 22:56:24

QNo.4233253

すぐに回答ほしいです

質問者が選んだベストアンサー

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の邪魔はしません。

投稿日時 - 2008-08-07 01:11:07

このQ&Aは役に立ちましたか?

13人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

とりあえず、エラーコードを載せましょう。
また、再現するコードを載せましょう。

> 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は決まります。

投稿日時 - 2008-08-07 15:40:52

あなたにオススメの質問