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

时间:2013-11-30 17:23:39

标签: mysql

我想获得每个类别的第二和第三大?这该怎么做 ? 抱歉我的英文不好

我有这样的表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      ||

现在我希望得到两个记录,每个类别的值大2和3(前3个除了最大值) 我需要的输出

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

1 个答案:

答案 0 :(得分:0)

以下查询将根据表格中的类别返回前2首和第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开始递增数字并在类别更改时重置然后最后我在外部查询中选择第2和第3条记录。