電子書籍の厳選無料作品が豊富!

ページ名 | ユーザ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 の対象で無ければならないみたく、
どのように集計すれば良いのか、とても困っております。

大変申し訳ありませんが、ご教授願えませんでしょうか?
宜しくお願い申し上げます。

A 回答 (2件)

そちらの環境のPostgresのバージョンが分からないですが、


手元の環境ではこんな感じで取れます。

select count(t1.ページ名) , t1.ページ名
from (select ページ名 , ユーザID from テーブル group by ページ名 , ユーザID)as t1
group by t1.ページ名
    • good
    • 0

いま、手元にポスグレがないから確認できないんだけど、


たしか、このSQLが通ったはず。

SELECT ページ名,COUNT(DISTINCT ユーザーID) FROM テーブル
GROUP BY ページ名
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!