Yahoo!知恵袋や類似のQ&Aサイトで、ユーザーごとの回答数を集計し、上位10人を抽出したい場合、SQLクエリを活用すると効率的に集計できます。この記事では、基本的なSQLの考え方とサンプルクエリを解説します。
データ構造の確認
まず、回答データが格納されているテーブルの構造を確認します。一般的には、回答テーブルに以下のようなカラムがあります。
- answer_id: 回答の一意ID
- user_id: 回答したユーザーのID
- question_id: 回答対象の質問ID
- created_at: 回答日時
このような構造があれば、user_idごとに回答数を集計できます。
基本的な集計クエリ
ユーザーごとの回答数を集計し、多い順に並べるSQLは以下のように書けます。
SELECT user_id, COUNT(*) AS answer_countFROM answersGROUP BY user_idORDER BY answer_count DESCLIMIT 10;
このクエリでは、answersテーブルからuser_idごとの回答数をカウントし、多い順に並べて上位10件を取得します。
追加条件の設定
期間を限定して集計したい場合は、WHERE句を追加します。例えば、直近1年間の回答数で集計する場合は。
SELECT user_id, COUNT(*) AS answer_countFROM answersWHERE created_at >= DATE_SUB(CURDATE(), INTERVAL 1 YEAR)GROUP BY user_idORDER BY answer_count DESCLIMIT 10;
これにより、最新の活動に基づいたランキングが作成可能です。
ユーザー情報との結合
ユーザー名やプロフィール情報を表示したい場合は、ユーザーテーブルと結合します。
SELECT u.username, COUNT(a.answer_id) AS answer_countFROM answers aJOIN users u ON a.user_id = u.user_idGROUP BY a.user_id, u.usernameORDER BY answer_count DESCLIMIT 10;
これにより、ユーザー名と回答数を一緒に取得できます。
まとめ
Yahoo!知恵袋で回答数の多い上位ユーザーを抽出するには、SQLのGROUP BY、COUNT、ORDER BY、LIMITを活用します。期間を指定したり、ユーザー情報と結合することで、より実用的なランキングを作成できます。この方法は他のQ&Aサイトや類似データベースでも応用可能です。


コメント