Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从MySQL中的每个“GroupBy”类别中检索任意数量的随机行_Mysql_Select_Random_Group By - Fatal编程技术网

从MySQL中的每个“GroupBy”类别中检索任意数量的随机行

从MySQL中的每个“GroupBy”类别中检索任意数量的随机行,mysql,select,random,group-by,Mysql,Select,Random,Group By,我在MySQL中有一个表,其中包含一个列名类别。 我试图编写一个查询,从每个类别返回2条随机记录 下面是我用来从每个类别中获得2条记录的代码,这些记录在我的评级列中具有最高值: 查看此链接可查看包含一些示例数据和上述查询的表: 通过按类别列和随机数对表格进行排序,我获得了您想要的结果。然后,我为每一行分配了一个递增的数字,每一行在类别更改时从1开始。然后,我只返回rowNum小于或等于2的结果。如果要返回3个随机行,只需将其更改为小于或等于3,依此类推 SELECT entry_id,

我在MySQL中有一个表,其中包含一个列名类别。 我试图编写一个查询,从每个类别返回2条随机记录

下面是我用来从每个类别中获得2条记录的代码,这些记录在我的评级列中具有最高值:

查看此链接可查看包含一些示例数据和上述查询的表:

通过按类别列和随机数对表格进行排序,我获得了您想要的结果。然后,我为每一行分配了一个递增的数字,每一行在类别更改时从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;