从MySQL中的每个“GroupBy”类别中检索任意数量的随机行
我在MySQL中有一个表,其中包含一个列名类别。 我试图编写一个查询,从每个类别返回2条随机记录 下面是我用来从每个类别中获得2条记录的代码,这些记录在我的评级列中具有最高值: 查看此链接可查看包含一些示例数据和上述查询的表:从MySQL中的每个“GroupBy”类别中检索任意数量的随机行,mysql,select,random,group-by,Mysql,Select,Random,Group By,我在MySQL中有一个表,其中包含一个列名类别。 我试图编写一个查询,从每个类别返回2条随机记录 下面是我用来从每个类别中获得2条记录的代码,这些记录在我的评级列中具有最高值: 查看此链接可查看包含一些示例数据和上述查询的表: 通过按类别列和随机数对表格进行排序,我获得了您想要的结果。然后,我为每一行分配了一个递增的数字,每一行在类别更改时从1开始。然后,我只返回rowNum小于或等于2的结果。如果要返回3个随机行,只需将其更改为小于或等于3,依此类推 SELECT entry_id,
通过按类别列和随机数对表格进行排序,我获得了您想要的结果。然后,我为每一行分配了一个递增的数字,每一行在类别更改时从1开始。然后,我只返回rowNum小于或等于2的结果。如果要返回3个随机行,只需将其更改为小于或等于3,依此类推
SELECT entry_id,
category,
rating
FROM (SELECT @currank := IF(@category = category, @currank + 1, 1) AS rowNum,
@category := category AS categoryVar,
e1.*
FROM (SELECT *,
(SELECT @currank := 0) r
FROM entries
ORDER BY category,
Rand()) AS e1)AS e2
WHERE rownum <= 2
ORDER BY category,
rating;
下面是一个类似于您在问题中发布的SQLFIDLE链接:
请注意,可以轻松地调整此查询,以返回一组非随机的记录。例如,如果您想返回每个类别的前5名评分,您可以更改
按类别排序,兰特
到
按类别、等级说明排序
改变
WHERE rownum您到底需要什么..每个类别中有2个随机记录对吗??或者,这与您包含的查询相关吗。。!?查询只是为了显示我正在处理的内容,比如说,在表10中,每个类别有30个条目,我想检索每个类别的2个随机条目。这将返回6个结果。请看以下帖子:
SELECT entry_id,
category,
rating
FROM (SELECT @currank := IF(@category = category, @currank + 1, 1) AS rowNum,
@category := category AS categoryVar,
e1.*
FROM (SELECT *,
(SELECT @currank := 0) r
FROM entries
ORDER BY category,
Rand()) AS e1)AS e2
WHERE rownum <= 2
ORDER BY category,
rating;