table t 结构如下 分别为名称,喜欢次数 类别
内容如下
name like_num  type
a    1        2
b    3          2
c    9          1
d    8          1
e    9        1把表t里type按照类别排序,并且返回喜欢次数最多的内容,并且同一个类别只返回一条数据
如果喜欢次数一样,类别一样,随便返回那条的可以
要求返回
name like_num  type
c    9          1
b    3          2
或者要求返回
name like_num  type
c    9          1
e    3          2

解决方案 »

  1.   

    select *
    from t t1
    where not exists (select 1 from t t2 where t1.type=t2.type and t1.like_num<t2.like_num and t1.name >t2.name)
      

  2.   

    select * from t t1
    where not exists(select 1 from t t2
    where t1.type=t2.type and t1.like_num<t2.like_num
    and t1.name>t2.name);
      

  3.   

    select * from (
    select row_number() over(partition by type order by like_num desc ) as no,name,like_num,type from test 
    ) a where a.no=1