0

行の数が最も多い 2 人のユーザー、つまり、ログ テーブルで最もアクティビティが多い 2 人のユーザーからすべての行を取得したいと考えています。

次の解決策しか見つかりませんでした。最初に、すべてのユーザーの行数を取得し、2 に制限します。

SELECT userid, count(*) AS n_of_rows FROM my_table GROUP BY userid LIMIT 2;

次に、データベース (Python など) にクエリを実行しているソース コードから、データベースにクエリを実行して、各ユーザーの行を取得します。

SELECT * FROM my_table where userid = $userid

SQL 言語自体とデータベースのパフォーマンスを考慮して、それは最善の/エレガントなソリューションですか?

ありがとう!

4

3 に答える 3

3

あなたが探しているのは次のようなものだと思います

select * from my_table where userid in
(select userid from my_table
 group by userid
 order by count(*) desc
 limit 2)
于 2013-09-19T20:32:00.733 に答える
2

行を取得して順序を維持するには、join集計で a を使用します。

select t.*
from my_table t join
     (select userid, count(*) as cnt
      from my_table
      group by userid
      order by count(*) desc
      limit 2
     ) top2
     on t.userid = top2.userid
order by top2.cnt desc, userid;
于 2013-09-19T20:45:17.453 に答える
0

これを試して:

SELECT TOP 2 userid, count(*) AS n_of_rows 
FROM my_table 
GROUP BY userid 
ORDER BY count(*) desc
于 2013-09-19T20:29:09.483 に答える