将sql查询转换为mySql,需要每个类别的前5条记录

时间:2012-02-13 11:25:06

标签: mysql sql-server

我需要每个类别的前5条记录。 下面查询执行fineon sqlserver而不是我的sql,需要转换成mySql

SELECT N.TITLE AS NewsTitle , N.ID AS NewsID, NC.NAME AS NewsCategory, NC.ID AS NewsCatID
    FROM (
        SELECT N.TITLE AS NewsTitle , N.ID AS NewsID, NC.NAME AS NewsCategory, NC.ID AS NewsCatID, Rank() over (Partition BY NC.[NAME] ORDER BY N.TITLE ) AS Rank
        FROM News N
        INNER JOIN News_Category NC ON NC.ID = N.ID_News_Category
        ) rs WHERE Rank <= 5

1 个答案:

答案 0 :(得分:1)

没有RANK函数是MySQL。你可以在这里使用类似的方法:

Rank function in MySQL

然而,问题是这不会考虑队伍中的“关系”。您的2条评论表明您只需要添加Limit 5几乎100%准确。

您可以(并且可能会)添加一些Limit 5以及order by子句,这几乎可以完全解决您的问题。唯一剩下的就是Rank允许联系。这意味着当您选择Rank&lt; = 5,的位置时,您可以将6条或更多条记录作为结果(由于它们在排名中“绑定”,请在此处查看更多详细信息:{{3 }})。

总而言之,你应该想想,如果你真的 担心关系。如果你是,你应该google如果有人真的为mysql做了类似于t-sql的排名函数的某种排名功能。 stackoverflow链接的第二个答案有一种允许绑定的排名列,你应该检查它。如果您不那么担心,只需在查询中添加一些LIMIT 5,因为最高评论者说,你会没事的。

编辑:我找到了一个优秀的网站,可以在MySQL中排名! http://thehobt.blogspot.com/2009/02/rownumber-rank-and-denserank.html