• ベストアンサー

カラムの関係が多対多の場合の集計方法

ページ名 | ユーザID mypage | 2 other | 2 other | 4 mypage | 2 index | -1 index | -1 mypage | 2 other | 3 other | 2 mypage | 2 index | -1 index | 3 上記のテーブルのように、ページ名とユーザIDが多対多のような関係になっている時に、 各ページにアクセスしてきたユニークユーザ数を取得したいと考えております。 上記の例ですと、求めたい答えは下記となります。 mypage:1 アクセスしたユーザは、2だけなので、ユニーク数は1 index:2 アクセスしたユーザは、-1と3なので、ユニーク数は2 other:3 アクセスしたユーザは、2と3と4なので、ユニーク数は3 group byで分けて集計すれば良いと単純に考えたのですが、 selectの対象は、group by の対象で無ければならないみたく、 どのように集計すれば良いのか、とても困っております。 大変申し訳ありませんが、ご教授願えませんでしょうか? 宜しくお願い申し上げます。

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

  • ベストアンサー
  • yamada404
  • ベストアンサー率56% (9/16)
回答No.1

そちらの環境のPostgresのバージョンが分からないですが、 手元の環境ではこんな感じで取れます。 select count(t1.ページ名) , t1.ページ名 from (select ページ名 , ユーザID from テーブル group by ページ名 , ユーザID)as t1 group by t1.ページ名

その他の回答 (1)

  • qbr2
  • ベストアンサー率50% (62/123)
回答No.2

いま、手元にポスグレがないから確認できないんだけど、 たしか、このSQLが通ったはず。 SELECT ページ名,COUNT(DISTINCT ユーザーID) FROM テーブル GROUP BY ページ名

関連するQ&A