SQL - Select 'n' greatest elements in group

陌路散爱 提交于 2019-12-04 19:01:22
select * from users as t1
where (select count(*) from users as t2
       where t1.division = t2.division and t2.rank > t1.rank) <2
order by division,rank
   SELECT * FROM (
      SELECT u1.userid, u1.rank 
      FROM users u1
      GROUP BY u1.division
      HAVING u1.rank = MAX(u1.rank)
      ORDER BY u1.rank DESC
    UNION
      SELECT u2.userid, u2.rank 
      FROM users u2
      WHERE u2.id <> u1.id
      GROUP BY u2.division
      HAVING u2.rank = MAX(u2.rank)
      ORDER BY u2.rank DESC
    ) ranking
    ORDER BY ranking.userid 

Try this:

  SELECT *
    FROM (
         SELECT *, row_number() OVER (PARTITION BY division ORDER BY rank DESC) as rn
           FROM users
         ) as extended_users
   WHERE rn <= 2
ORDER BY userId
SELECT * from users u0
WHERE NOT EXISIS (
  SELECT * FROM users u1
  WHERE u1.division = u0.division
  AND u1.rank >= u0.rank +2
  );

BTW: most people count ranks starting from zero: poll-position gets rank=1, the second gets rank=2, et cetera. In that case you rank is 1+ the number of people before you in the ranking

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!