私はこの問題のタイトルを付ける方法がわかりません。あなたが良い言葉を持っているなら、私を訂正してください。MySQLは同じ条件値を持つ最上行を選択します
私は2つのテーブル、ユーザーと投稿を持っています。
ユーザー:
id | username | password | ...
投稿: - ほとんどの記事を書かれているユーザー
id | author_id | title | content | ...
は今、私が "最もアクティブ" ユーザーをリストします。具体的には、top 10
の結果が必要です。
SELECT u.username, COUNT(p.id) AS count
FROM Posts p, Users u
WHERE u.id=p.author_id
GROUP BY p.author_id
ORDER BY count DESC
LIMIT 10;
私は期待される結果を得ることができます。ただし、ユーザーの数が同じ場合、ランキングは「fair」にならないことがあります。ここで
User 1 | 14
User 2 | 13
...
User 9 | 4
User 10 | 4
、4
投稿があり、実際にいくつかのより多くのユーザーがあります。
例えば、私のような結果が得ることができます。
したがって、top 10
は正確に10
の結果ではない可能性があります。 4
の投稿を持っている余分な行が含まれている "fair"の結果を得るにはどうすればよいですか?
非常に興味深い問題:)クエリで変数が必要になる場合があります。人々がどのように思い付くのかを見てみましょう。 –
いくつかのサンプルデータを追加して素晴らしいフィドルを見ることができますか? –
@Hanky laugh Panky私はここでデータを簡略化しました。あなたがテストしたい場合、あなたは簡単にいくつかのデータを偽造することができる "トップ2"のケースを試すことができます。 – mrmoment