mysql 分组和获取随机记录

来源:互联网 发布:淘宝商品降价通知 编辑:程序博客网 时间:2024/06/05 12:42

现在有一张表 info 如图1-1所示,我想要每个class返回一条随机记录:



图1-1 数据源


我们知道 GROUP BY 可以实现分组,分组的效果如图1-2 所示


mysql> SELECT * FROM info GROUP BY class ;




图1-2 使用GROUP BY 分组后的数据


结合图1-1  可以看出来GROUP BY 返回的是每个class的第一个数据,这显然是不符合我想要获取随机记录的要求的。在mysql中提供了ORDER BY RAND() 方法,它的作用是将返回的结果集顺序打乱,如图1-3所示:


mysql> SELECT * FROM info ORDER BY RAND();



 

图1-3 ORDER BY RAND 后的结果


mysql 还提供了一个LIMIT 来限制返回的结果数,如图1-4所示 :


mysql> SELECT * FROM info LIMIT 2 ;




图1-4 使用LIMIT 控制返回数量


结合ORDER BY RAND 和 LIMIT 就可以实现随机返回指定条记录了,如图1-5 所示:


mysql> SELECT * FROM info ORDER BY RAND() LIMIT 1 ;




图1-5 返回指定条随机记录


如果要随机返回一条class =1 的记录,可以这样做 :


mysql> SELECT * FROM info WHERE class = 1 ORDER BY RAND( ) LIMIT 1 ;




图1-6 随机返回一条class =1 的记录


如果要每个class返回一条随机记录就需要结合上边说的几个方法了,具体如图1-7所示:


mysql> SELECT * FROM ( SELECT * FROM info ORDER BY RAND() ) AS temp GROUP BY class ;




图1-7 每个class返回一条随机记录


这里要注意的是要给中间的查询结果起一个别名temp(可以取其他的),不然会报错,如图1-8所示:




图1-8 不起别名报错


1 0
原创粉丝点击