質問 |
||
| QNo.3749411 | distinct句を使わずレコード総計を求めたい | |
|---|---|---|
| 質問者:shibataro3 |
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" が含まれている可能性があります。とエラーになってしまいました。 |
|
困り度:
|
||
| 質問投稿日時: 08/02/06 11:09 |
||
回答良回答20pt |
|
| ANo.4 | できます。だけではなんですので オンラインでSQLをテストできるURLを付けておきます。要OTN登録 |
|---|---|
| 回答者:MZ-80B | |
| 種類:回答 どんな人:一般人 自信:参考意見 |
|
| 回答日時: 08/02/06 14:57 |
|
| |
| 参考URL: | http://otn.oracle.co.jp/training/index.html |
| この回答へのお礼 | ご回答ありがとうございました。こんなサイトがあったんですね! 用意されていたテーブルを利用して(copy_empというテーブルを使い、manager_idをgroup byしました)実行したところ、重複データを除いたレコード総数が求められました。Oracleと他のDBでこんなに違うのかと驚きました。 ただ、distinct句では18件、group by句では19件とgroup by句のほうで、NULL値もカウントしているようでしたので、もっといろいろ勉強したいと思います。本当にどうもありがとうございました。 |
回答 |
|
| ANo.3 | 手抜きしてうまく伝わってない可能性があるみたいので select count(count(*)) from 商品DB group by 商品名; です。 |
|---|---|
| 回答者:MZ-80B | |
| 種類:回答 どんな人:一般人 自信:参考意見 |
|
| 回答日時: 08/02/06 13:17 |
|
| |
| この回答への補足 | 早速のご回答ありがとうございます!教えていただいた方法で試してみたのですが、DB2では「列関数 "COUNT" のオペランドに、列関数、スカラー全選択、または副照会が含まれています。」、SQL Serverでは「集計やサブクエリを含む式に対して集計関数を実行することはできません。」というエラーがでてしまいました。 現在Oracleが手元にないので試せず、申し訳ないのですがOracleでは実行できますでしょうか? |
| この回答へのお礼 | この回答にお礼をつける(質問者のみ) |
回答良回答10pt |
|
| ANo.2 | select count(1) from 商品DB group by 商品名; が一番無駄がないかと。 |
|---|---|
| 回答者:k_o_r_o_c_h_a_n | |
| 種類:回答 どんな人:一般人 自信:参考意見 |
|
| 回答日時: 08/02/06 12:47 |
|
| |
| この回答への補足 | ご回答ありがとうございます!試してみたのですが、count(1)というところで、1列目(=商品名)が指定になるらしく、 2 2 1 と結果がでてしまいました。3という結果が出ると嬉しいのですが。 |
| この回答へのお礼 | この回答にお礼をつける(質問者のみ) |
回答 |
|
| ANo.1 | count(count(*)) を使います |
|---|---|
| 回答者:MZ-80B | |
| 種類:回答 どんな人:一般人 自信:参考意見 |
|
| 回答日時: 08/02/06 11:52 |
|
| |
| この回答へのお礼 | この回答にお礼をつける(質問者のみ) |