SQLで重複データを数え上げるには、GROUP BYでまとめたものをCOUNT関数で数えれば良い。
例えば…
Webアクセスをロギングしている、logテーブル
・Time(アクセス時間)
・Uri(アクセスページ)
・UserAgent(ユーザーエージェント)
から、アクセスの多いページ順にUri(アクセスページ)を並べるには…
SELECT `Uri`, COUNT(`Uri`) FROM `log` GROUP BY `Uri` ORDER BY count(`Uri`) DESC;
2013/02/04追記
昨日のアクセスランキングを表示するには、WHERE句を追加すれば良い。
SELECT `Uri`, COUNT(`Uri`) FROM `log` WHERE DATE(`Time`) = DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY) GROUP BY `Uri` ORDER BY count(`Uri`) DESC;
※2018/06/29追記
MySQL5.7からORDER BYの仕様が変わりました。
くわしくはこちら 👉 [MySQL] #1055エラー (ORDER BYに関するエラー)