• ベストアンサー

POSTGRES で DISTINCT したものを COUNT するにはどう書いたら

よいのでしょうか? 教えてください。お願いします。 いろいろやってみてはいるのですが・・・

noname#9771
noname#9771

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

  • ベストアンサー
  • koyuki80
  • ベストアンサー率38% (19/50)
回答No.1

こんにちは。 私はDB2の環境でのみのSQL実行となるので、もしかしたら違うかもしれません。参考になさってください。 単純に、DISTINCTの対象列が1列なのであれば、 COUNT(DISTINCT 列名) で可能かと思います。 COUNT(*)は、条件に合致する行数をカウントします。 一方、COUNT(DISTINCT 列名)は、条件に合致する行でその列について、値の種類数をカウントします。 次に、DISTINCTの対象列が複数の場合は、この方法が使えないため、他の方法を利用しましょう。おそらく、今回のご質問は、こちらの場合だと思うのですが。 SELECT COUNT(*) FROM (SELECT DISTINCT ~) AS TEMP このように、SELECT文を入れ子にして使うことで、DISTINCTしたものをCOUNTできるはずです。ちなみに、最後の AS TEMP は、一時的に作ったSELECT文の結果表に別名をつけています。FROM文節にSELECT文を入れ子にした場合は必須なので忘れないようにしてください。 もし、ご質問した内容と回答がすれ違っているようでしたら、補足をお願いいたします。

noname#9771
質問者

お礼

回答ありがとうございました。 丁寧に書いてくださり、本当にありがたいです。 質問した件、ちゃんと動きました。 本当にありがとうございます。

関連するQ&A

  • DISTINCT + COUNT

    みなさんこんにちは。 以下のようなSQL文のCOUNT関数を作りたいのですが、 うまい手法がわからず困っています。 SELECT DISTINCT Ta.会員ID, Tb.品番 FROM TABLE_A AS Ta LEFT JOIN TABLE_B AS Tb ON Ta.ID = Tb.ID ↑こいつのCOUNTですが、単純に SELECT COUNT(DISTINCT Ta.会員ID, Tb.品番) ~ とやるとエラーになってしまいます。 どうやってやればカウントできるのでしょうか? すごく初歩的なことだと思いますが、 ご助言お願いいたします。

  • countとdistinctを使ったSQL文ついて

    countとdistinctを使ったSQL文について VB2005+SQLSERVER2005で開発を行っています。 distinctとcountを組み合わせて抽出するようなSQL文になるのかなと思うのですが うまくいきません カラム maker:メーカ名が登録されている テーブル shohin カラムmakerの実際のデータ例 富士通 NEC 東芝 パナソニック NEC NEC パナソニック 抽出した結果の例 富士通    1 NEC     3 東芝     1 パナソニック 2 メーカー名とその件数が出力結果となります 以上ですがわかる方いらっしゃいましたらご回答お願いいたします。

  • COUNT(DISTINCT *)がエラーになる理由を教えてください

    以下のSQL文がエラーとなるのはなぜですか? SELECT COUNT(DISTINCT *) FROM 社員 SELECT DISTINCT * FROM 社員 ならエラーにならないのにどうしてでしょうか

  • DISTINCTの使い方について

    ---------------------------------  元データ --------------------------------- ID CATEGORY CREATE_DATE 001 A100 2008/10/01 002 B100 2009/01/01 003 C100 2009/01/01 004 A100 2009/02/01 005 B100 2009/02/01 006 A100 2009/03/01 --------------------------------- ---------------------------------  出力したい形式 --------------------------------- ID CATEGORY CREATE_DATE 003 C100 2009/01/01 005 B100 2009/02/01 006 A100 2009/03/01 --------------------------------- 「CATEGORY」でユニークになるようにしたいと思っています。 重複しているものは、最新のデータ(CREATE_DATEが新しいもの)を 優先して取得したいと思っています。 ============================= SELECT DISTINCT(CATEGORY) CATEGORY, ID, CREATE_DATE FROM TABLE_NAME ORDER BY CREATE_DATE DESC ============================= というSQLを書いてみましたが、「CATEGORY」でユニークになって くれません。 また「CREATE_DATEが新しいもの」という点はORDER BY で行えば 良いのでしょうか? 以上、よろしくお願いいたします。

  • DISTINCTの使い方を教えて下さい

    Select 文で DISTINCT を記述すると結果(Count)は-1となってしまいます。 DISTINCTを外すと全件表示されます。 これは何がまずいのでしょうか ? 環境 DB=SQLserver 2000 + IIS 5.0 + ASP 例:Select DISTINCT TABLE1,TABLE2,TABLE3 FROM TABLE ちなみにdbをAccess で使用している時とクエリアナライザではOKでした。

  • DISTINCTについて

    こんにちは。質問させて下さい。 重複レコードを除くデータを取得する際、 DISTINCT キーワードを使用しますが 重複レコードを取得したい場合はどのようにすれば よいのでしょうか? 宜しくお願いいたします。

  • SELECT DISTINCTの結果件数をCOUNTする方法

    SQL SERVER 2005 EXPRESS のストアドプロシージャで、 SELECT結果の件数を、変数 @count に取得したいのですが DISTINCTの引数が複数あるのが原因なのか、上手くいきません。 目的はテーブル「TBL」から、COMとUSERの組み合わせの リストを抽出し、その件数を取得する事です。 テーブル名:TBL COM  USER --------------- 001  A 002  A 003  A 001  B 002  A 003  C 「COMとUSERの組み合わせで、重複するものは取らない」のならば  SELECT DISTINCT COM,USER  FROM TBL で、下記のような結果が得られます。 COM  USER --------------- 001  A 002  A 003  A 001  B 003  C で、この結果件数である「5」を取りたいのですが DECLARE @count int  SELECT @count = COUNT(DISTINCT COM,USER)  FROM TBL print @count と打っても失敗します。 ( )の括りやCOUNTの位置をいろいろと試したが出来ませんでした。 COUNT DISTINCT(複数項目)が出来ないのならば、 どうすればこの結果の件数を取得できるでしょうか? どうかご教授授くださいませ。よろしくお願いします。

  • distinct したい!

    select ●, distinct ■ from sample こんな感じで取得できないでしょうか ●は無条件でくっついてくる感じです。。。

    • ベストアンサー
    • MySQL
  • count(*)のcountをとりたい

    現在、以下のようなテーブルを扱っているのですが、 +---------+ |accountid| +---------+ |   999| |   999| |   638| |   638| |   638| |   999| |   999| |   638| +---------+ を、ユニークな件数でとろうとしています。 現在は > select count(*) from TABLE group by accountid; +----------+ | count(*)| +----------+ |     4| |     4| +----------+ 2 rows in set (0.00 sec) などとして、「2 rows in set」を読むと言う方法なのですが、それだと人の手を介さないといけないのでどうにか出力結果をダイレクトに取得したいのです。 SQLサーバで使えるらしい select count(*) from (select count(*) from TABLE group by accountid) as AA; と言うSQL文を使っても無理だったので、どなたか方法をご存じないでしょうか???

    • ベストアンサー
    • MySQL
  • Postgresにて

    データベース勉強中です。 Postgresの7.2.3を使用していて、 ある事をさせようと思っているのですがうまく出来ません。 どなたかわかる方がいらっしゃいましたら、お願い致します。 そのある事なのですが 形式が全く同じで、データのみが違うTable_AとTable_Bがあります。 Table_A.codeとTable_B.codeが一致した場合はUPDATE、 Table_A.codeに存在せず、Table_B.codeに存在した場合はINSERTをしたい場合はどのようにするのが良いでしょうか。 一言で申しますと、Table_Bには更新データが入っておりまして、Table_Aに反映させたいのです。 DELETE FROM Table_A WHERE Table_A.code = Table_B.code; をしてから、 INSERT INTO Table_A SELECT * FROM Table_B; を考えたのですが、あまり美しくないかなと思いまして、 UPDATEとINSERTをからませて出来ますでしょうか。 その他にも何か良い方法がありましたら、お願い致します。