如何选择每个类别的第二条、第三条记录



我想得到每个类别中第二个和第三个最大的?如何做到这一点对不起我英语不好

我有这样的表格tin_tuc

||id || id_cat ||some information
||1  || 1      ||      
||2  || 1      ||
||3  || 1      ||
||4  || 1      ||
||5  || 2      ||
||6  || 2      || 
||7  || 3      ||
||8  || 3      ||
||9  || 3      ||

现在我想得到两个记录,每个类别的值大第二和第三(除了最大值之外的前三)
我想要

||id || id_cat ||some information
||2  || 1      ||
||3  || 1      ||
||5  || 2      ||
||6  || 2      || 
||8  || 3      ||
||9  || 3      ||

以下查询将根据表中的类别返回排名前二和第三的歌曲:

set @num := 0, @category := '';
select
    songID, `categoryId`, hits
    from 
        (
        select songID, categoryid, hits,
              @num := if(@category = `categoryid`, @num + 1, 1) as row_number,
              @category := `categoryid` as dummy
          from songs
          where categoryid is not null
          order by `categoryid`, hits desc
        ) as temptable
    where temptable.row_number=3 or temptable.row_number=2;

在这里,我在子查询中按类别和命中率(我的优先级,例如,你可以选择你的最高点持有字段)对所有记录进行排序,然后给每条记录一个从1开始的递增数字,当类别发生变化时重置,最后我在外部查询中选择第二条和第三条记录。

最新更新