プロが教えるわが家の防犯対策術!

DB初心者です。
DISTINCT句を使わずに、group by句を使って
重複データを除いたレコード総計を求めたいと思い、
下記の用にSQL文を書いたのですがうまくいきません。
oracleではなく、DB2を使っているのですがSQL文として
可能なのか教えていただければと思い質問を致しました。
<例>
テーブル名:商品DB
商品名
a
a
b
b
c
だったら、重複を除いたレコード数は3になりますが、
select count(*) from 商品DB group by 商品名
とすると
2
2
1
となり、それぞれの商品の合計数が出てしまうので
select count(*) from ( select 商品名 from 商品DB group by 商品名)
と副問合せ(でよいのでしょうか?)をしてみると
入力が予想されるトークンには "AS" が含まれている可能性があります。とエラーになってしまいました。

A 回答 (4件)

できます。

だけではなんですので
オンラインでSQLをテストできるURLを付けておきます。要OTN登録

参考URL:http://otn.oracle.co.jp/training/index.html
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。こんなサイトがあったんですね!
用意されていたテーブルを利用して(copy_empというテーブルを使い、manager_idをgroup byしました)実行したところ、重複データを除いたレコード総数が求められました。Oracleと他のDBでこんなに違うのかと驚きました。
ただ、distinct句では18件、group by句では19件とgroup by句のほうで、NULL値もカウントしているようでしたので、もっといろいろ勉強したいと思います。本当にどうもありがとうございました。

お礼日時:2008/02/06 17:52

手抜きしてうまく伝わってない可能性があるみたいので


select count(count(*)) from 商品DB group by 商品名;
です。

この回答への補足

早速のご回答ありがとうございます!教えていただいた方法で試してみたのですが、DB2では「列関数 "COUNT" のオペランドに、列関数、スカラー全選択、または副照会が含まれています。」、SQL Serverでは「集計やサブクエリを含む式に対して集計関数を実行することはできません。」というエラーがでてしまいました。
現在Oracleが手元にないので試せず、申し訳ないのですがOracleでは実行できますでしょうか?

補足日時:2008/02/06 14:09
    • good
    • 0

select count(1) from 商品DB group by 商品名;


が一番無駄がないかと。

この回答への補足

ご回答ありがとうございます!試してみたのですが、count(1)というところで、1列目(=商品名)が指定になるらしく、
2
2
1
と結果がでてしまいました。3という結果が出ると嬉しいのですが。

補足日時:2008/02/06 14:04
    • good
    • 0

count(count(*)) を使います

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!