- ベストアンサー
distinct句を使わずレコード総計を求めたい
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" が含まれている可能性があります。とエラーになってしまいました。
- shibataro3
- お礼率57% (4/7)
- Oracle
- 回答数4
- ありがとう数2
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
できます。だけではなんですので オンラインでSQLをテストできるURLを付けておきます。要OTN登録
その他の回答 (3)
- MZ-80B
- ベストアンサー率56% (46/81)
手抜きしてうまく伝わってない可能性があるみたいので select count(count(*)) from 商品DB group by 商品名; です。
補足
早速のご回答ありがとうございます!教えていただいた方法で試してみたのですが、DB2では「列関数 "COUNT" のオペランドに、列関数、スカラー全選択、または副照会が含まれています。」、SQL Serverでは「集計やサブクエリを含む式に対して集計関数を実行することはできません。」というエラーがでてしまいました。 現在Oracleが手元にないので試せず、申し訳ないのですがOracleでは実行できますでしょうか?
- k_o_r_o_c_h_a_n
- ベストアンサー率55% (526/942)
select count(1) from 商品DB group by 商品名; が一番無駄がないかと。
補足
ご回答ありがとうございます!試してみたのですが、count(1)というところで、1列目(=商品名)が指定になるらしく、 2 2 1 と結果がでてしまいました。3という結果が出ると嬉しいのですが。
- MZ-80B
- ベストアンサー率56% (46/81)
count(count(*)) を使います
関連するQ&A
- 入れ子を使わずにレコードの総計を出したい
こんにちわ。PostgreSQLのSQL文について質問させてください。 以下のSQL文を実行したとき、 # select c.id from C c left join S s on (s.id=c.id) where c.num = 1 group by c.id having count(s.id) >= 5; id ---- 7 5 (2 rows) というデータが表示されるんですが、このSQL文で抽出したデータの総件数を求めるにはどうしたらいいでしょうか? 入れ子を使うと、 # select count(*) from (select c.id from C c left join S s on (s.id=c.id) where c.num = 1 group by c.id having count(s.id) >= 5) tmp; というふうに書け、 count ------- 2 (1 row) と表示されるのはわかりますが、入れ子を使わずに上のように表示させるにはどうしたらよいでしょうか? よろしくお願いいたします。
- 締切済み
- PostgreSQL
- 重複するレコードを調べるSQL
重複するレコードを調べるSQL 初歩的な質問ですみません! 重複するレコードを調べるために以下のようなSQLを作ったのですが、 遅くて困っています。 もっと速くする方法があれば教えてください! 異なるカテゴリーでも商品コードが重複しているものがないかを探すSQLです。 SELECT A.商品コード, A.X, B.カテゴリー FROM (SELECT COUNT(商品コード) X, 商品コード FROM テーブルA WHERE 追加年月 = 201008 GROUP BY 商品コード) A, (SELECT 商品コード, カテゴリー FROM テーブルA WHERE 追加年月 = 201008 ) B " WHERE A.X >= 2 AND B.商品コード = A.商品コード
- ベストアンサー
- Oracle
- 「SELECT ~ FROM テーブル名」の後に続く句は「WHERE句」と「ORDER BY句」以外にありますか?
最近アクセスのSQL文を学びました。 選択クエリのSQL文で 「SELECT ~ FROM テーブル名」 の後に続く句は 「WHERE句」と 「ORDER BY句」以外にありますか? よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- DISTINCTでは無理でしょうか?
市区町村|コード| 杉並区 |22222| 杉並区 |22222| 杉並区 |77777| 豊島区 |88888| SQL文で、上記のデータから重複するコードは一つのカウントとしてまとめ、下記のように杉並区のデータを取得したいのですが、うまくいきません。どのように書けば良いでしょうか。 市区町村|CNT| 杉並区 |2 | 失敗SQL select DISTINCT 市区町村,コード, COUNT(*) as CNT from テーブル WHERE 市区町村 = '杉並区' GROUP BY 市区町村,コード
- ベストアンサー
- MySQL
- VB2010のSQLを使ったレコードカウント方法
VB2010にて他のシステムから出力したCSVファイルにアクセスして集計を行おうとしています。 重複を排除したカウントを得たいのですがうまくいきません。 (1) SQL = "SELECT DISTINCT 物品ID FROM …" だと目的のレコードを抽出できるのですがCOUNTを使って (2) SQL = "SELECT COUNT(DISTINCT 物品ID) AS 物品数 FROM …" とする『演算子がありません』とエラーが出て (3) SQL = "SELECT DISTINCT COUNT(物品ID) AS 物品数 FROM …" とすると値はですのですが(1)のレコード数と違う数が出てきます??? 素人の手探りでプログラミングをしているので動きの違いが分かりません ご教授お願いします。
- ベストアンサー
- Visual Basic
- GROUP BY句の集計について
はじめまして。 いろいろ調べて、何度試しても思うように 結果がでなかったので、投稿させて頂きました。 グループの集計をしてるのですが、 何個のグループがあるのかカウントしたいのです。 aaa bbb 110 a 110 b 111 c 112 d というDBに select aaa, bbb, count(*) as cnt from database GROUP BY aaa ORDER BY aaa だとそのグループ内の該当レコード数がカウントされてしまいます。 上記の例だとグループ数が“3”と結果を返すようにしたいのです。 では。宜しくお願いします。
- ベストアンサー
- MySQL
- 重複レコードの一括削除
重複データを抽出して、重複しているデータ分だけを一括で削除する事は可能でそうか。 SELECT hoge,count(*) AS count FROM テーブル GROUP BY hoge HAVING count>1 このように出せば重複データを出せたのですが、500件ほどレコードがあり、手作業では辛いです。 お力お貸しくださいませm(_ _)m よろしくお願いします。
- ベストアンサー
- MySQL
- accessでDISTINCT 句と矛盾
IIFで置き換えをした結果をソートしようとしましたが、 SELECT DISTINCT a,IIF(IsNull(b), 0, 1) AS c FROM shain ORDER BY a,c [Microsoft][ODBC Microsoft Access Driver] ORDER BY 句 (c) が DISTINCT 句と矛盾しています。 というエラーになりました。 正しいSQLを教えてください。 SELECT DISTINCT a,IIF(IsNull(b), 0, 1) AS c FROM shain ORDER BY a,b も試しましたが同じようにエラーになりました。
- ベストアンサー
- その他(データベース)
- 重複レコードの抽出について
以下のようなテーブルからmailが重複していてnameの値が全て同じ値を持つレコードを取得するためのSQL文を教えてください。 mail | name ----------- aaa | 01 aaa | 01 aaa | 01 bbb | 02 bbb | 02 bbb | 01 ccc | 01 ccc | 01 ccc | 02 select * from test where mail in (select mail from test where mail group by mail having count(mail)>1) 上記のSQL文だと以下のデータが取得されてしまいます。 ↓ mail | name ----------- aaa | 01 ○ aaa | 01 ○ aaa | 01 ○ bbb | 02 × bbb | 02 × ccc | 01 × ccc | 01 × ○印のみ取得したいのですが、 SQL文をどのように修正すればよいのでしょうか。 よろしくお願いいたします。
- 締切済み
- その他(データベース)
- 重複レコードのある項目を比較し更新する方法
nameで重複しているレコードをDateの 最新の日のレコードのIDをTGT_IDに入れたいのですが select * from テーブル名 where name in ( select name from テーブル名 group by name having count(*) > 1 ) と重複したカラムを抽出まではできるのですが そこからどうしたらいいのか分かりません どなたかご教授をお願いします。 ID name date tgt_id 1 A 20040403 2 2 A 20040625 2 3 B 20040429 4 4 B 20040623 4
- ベストアンサー
- Oracle
お礼
ご回答ありがとうございました。こんなサイトがあったんですね! 用意されていたテーブルを利用して(copy_empというテーブルを使い、manager_idをgroup byしました)実行したところ、重複データを除いたレコード総数が求められました。Oracleと他のDBでこんなに違うのかと驚きました。 ただ、distinct句では18件、group by句では19件とgroup by句のほうで、NULL値もカウントしているようでしたので、もっといろいろ勉強したいと思います。本当にどうもありがとうございました。