- ベストアンサー
SQLでグループ化した結果の件数を求めるには?
下記のようなグループ化した結果を表示するSQL文を作りました。 SELECT メーカコード FROM 部品表 GROUP BY メーカコード, 部品番号 HAVING ((部品番号)="BUHIN1") これを実行するとちゃんと結果が出るのですが、その結果の件数を求めるにはどのようなSQL文を追加すれば宜しいのでしょうか? COUNT文を使うと出来そうなのですが、 SELECT メーカコード, COUNT(メーカコード) AS CNT FROM 部品表 GROUP BY メーカコード, 部品番号 HAVING ((部品番号)="BUHIN1") とやるとメーカコードの個別件数が表示されてしまいます。 どうぞよろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんにちわ。 Oracle であれば、こんな書き方ができるかと思います。 SQL> SELECT COUNT(*) FROM (SELECT メーカコード FROM 部品表 GROUP BY メーカコード, 部品番号 HAVING ((部品番号)='BUHIN1')); でも件数を取得するのであれば、わざわざSQL 文を発行 するよりも、SQL%ROWCOUNT (PL/SQL) や、 sqlca.sqlerrd[2] (Pro*C) を使った方が DB に余計な負荷がかからなくて 良いと思います。
その他の回答 (3)
- iwashimizu
- ベストアンサー率30% (17/55)
AccessやSQL Serverでできるかどうかわかりませんが、 Oracleの場合は以下のようなサブクエリーを使えます。 SELECT COUNT(*) FROM ( SELECT メーカコード FROM 部品表 GROUP BY メーカコード, 部品番号 HAVING ((部品番号)="BUHIN1") )
お礼
ご回答ありがとうございます!急な仕事でご返答が遅くなり申し訳ありません。 Accessですと上記のSQL文は実行できませんでした。 Accessのサブクエリーの使い方を調べてみます。 どうもありがとうございました。
- kazuho_goo
- ベストアンサー率56% (34/60)
ちょっと思ったのですが SELECT メーカコード FROM 部品表 GROUP BY メーカコード, 部品番号 HAVING ((部品番号)="BUHIN1") のクエリーを作成してそのクエリーを元に集計関数を使用したクエリーを作成するのはどうでしょう? 例えば SELECT count(メーカコード) as カウント FROM 部品表 GROUP BY メーカコード, 部品番号 HAVING ((部品番号)="BUHIN1") ->クエリー1 select count(カウント) from クエリー1 質問のいとにそっています&スマートでないですかね...。
お礼
ご回答ありがとうございます!お返事が遅くなり申し訳ありません。 現在手元で確認できる環境ではない為実行できませんが、 Accessのサブクエリーの使い方を参考にさせていただきます。 どうもありがとうございました!
- root139
- ベストアンサー率60% (488/809)
やりたいことは、 「部品番号が"BUHIN1"である部品(レコード)を持つメーカの数の抽出」 ということでよろしいでしょうか? 手元にAccessが無いので、確認できませんが、一般的には下記の様なSQLで抽出できると思います。 ----------------------------------------- SELECT count(DISTINCT メーカコード) FROM 部品表 WHERE ((部品番号)="BUHIN1"); ----------------------------------------- 部品番号 = "BUHIN1" の条件はグループ化してもしなくても影響がないので、Where句でも問題ありません。
補足
ご回答ありがとうございます! やりたいことはおっしゃる通りです。 教えて頂いたSQL文をAccess97で実行したところ、エラーになってしまいました。 試しに DISTINCT を COUNT の前に配置したところエラーは出なくなったのですが、正しい結果が出てきません。 グループ化しなくてもよい方法で再度考えてみたいと思います。ありがとうございます!
補足
早速のご回答ありがとうございます! 私の使用環境は、Access97 です。 教えて頂いた SELECT COUNT(*) FROM (ぐるーぷ化のSQL) をSQL Serverに対し実行するとFROM文の誤りです、と表示されてしまいます。 Accessならクエリで段組みすれば解決しますが、将来的にSQL Serverへ接続する事を考え、SQL文のみで解決しようと思っております。 現在はレコードセット取得後、RecordCountプロパティにてデータ件数を調べています。 COUNT文を使ったほうが負荷が少ないと思ったのですがそんな事もなさそうですね・・。