MySQLのGROUP BYについて
created: 2008-12-06 18:27 | modified: 2008-12-06 19:06 | reply: 1
[4258] MySQLのGROUP BYについて
user: volks | created: 2008-12-06 18:27
お世話になります、volksです。
MySQLの話になるのですが、質問させてください。
アクセスログのランキングを表示するページを検討しているのですが、
まず、テーブル作成して、
このテーブルからトータルのランキングデータを取得するのであれば、
SELECT *, COUNT(id) as count FROM access GROUP BY url ORDER BY count DESC;
とSQLを発行すれば私の希望通りのデータを1回で取得できるのですが、
次に、このテーブルにある「user_id」カラムの値を判断して
ユニークユーザのランキングデータを取得したいとなった場合に、
どういうSQLを書けばよいのか分かりません。
全レコードを取得してから、PHPで処理するには少し負担が心配でして、
GROUP BY に条件を付け足すことで、よい方法があったりするのでしょうか?
宜しくお願い致します。
MySQLの話になるのですが、質問させてください。
アクセスログのランキングを表示するページを検討しているのですが、
まず、テーブル作成して、
create table access (
id int primary key not null auto_increment,
date timestamp,
url varchar(255),
user_id varchar(255)
) このテーブルからトータルのランキングデータを取得するのであれば、
SELECT *, COUNT(id) as count FROM access GROUP BY url ORDER BY count DESC;
とSQLを発行すれば私の希望通りのデータを1回で取得できるのですが、
次に、このテーブルにある「user_id」カラムの値を判断して
ユニークユーザのランキングデータを取得したいとなった場合に、
どういうSQLを書けばよいのか分かりません。
全レコードを取得してから、PHPで処理するには少し負担が心配でして、
GROUP BY に条件を付け足すことで、よい方法があったりするのでしょうか?
宜しくお願い致します。
[4259] 自己レスです。
user: volks | created: 2008-12-06 19:06
すいません、自己レスです。
今調べていると重複を除外するのに、DISTINCT を使用すると良いと
いうことで、試しに、
SELECT *, COUNT(DISTINCT user_id) as count FROM access GROUP BY url ORDER BY count DESC
とSQLを投げてみると、正しい集計結果が返ってきました。
申し訳ありません、お騒がせしましたが解決済みでお願いします。
もし、間違い等ありましたらつっこみお願いします。
有難うございました。
今調べていると重複を除外するのに、DISTINCT を使用すると良いと
いうことで、試しに、
SELECT *, COUNT(DISTINCT user_id) as count FROM access GROUP BY url ORDER BY count DESC
とSQLを投げてみると、正しい集計結果が返ってきました。
申し訳ありません、お騒がせしましたが解決済みでお願いします。
もし、間違い等ありましたらつっこみお願いします。
有難うございました。
