【发布时间】:2015-12-12 08:36:23
【问题描述】:
我正在寻找一种对 mysql 表进行随机采样的方法,并且正在阅读这篇文章 - http://jan.kneschke.de/projects/mysql/order-by-rand/
但是,这不适用于我的情况,因为 mysql 中的许多表都没有“rowid”/autoincrement 列。在这种情况下,我还有办法随机抽样行吗?
这是表结构:
'CREATE TABLE `table_name` (
`col1` date DEFAULT NULL,
`col2` bigint(20) DEFAULT NULL,
`col3` varchar(255) DEFAULT NULL,
`col4` varchar(64) DEFAULT NULL,
`col5` varchar(64) DEFAULT NULL,
`col6` bigint(20) DEFAULT NULL,
`col7` bigint(20) DEFAULT NULL,
`col8` varchar(255) DEFAULT NULL,
`col9` decimal(16,5) DEFAULT NULL,
`col10` bigint(20) DEFAULT NULL,
`col11` varchar(64) DEFAULT NULL,
`col12` bigint(20) DEFAULT NULL,
`col13` bigint(20) DEFAULT NULL,
`col14` bigint(20) DEFAULT NULL,
`col15` bigint(20) DEFAULT NULL
) ENGINE=BRIGHTHOUSE DEFAULT CHARSET=utf8'
【问题讨论】:
-
根据选择语句中“随机”生成的额外列进行选择,例如SELECT TOP 50 * FROM myTable WHERE rand() % 5 = 1
-
我实际上正在查看该帖子,但我认为其中一个假设是表中有一个唯一的、索引的主键,而我没有。当我按 rand() 限制 10 从表顺序中选择 column1 时,我得到表中该列的前 10 个条目。
-
@RogerWillcocks - 听起来不错,但我不确定如何在我的查询中生成额外的列,还有 rand()%5 = 1 有什么作用?
-
您能否提供您的表结构(创建语句)。我只是在没有自动增量列的表上尝试过它,它可以工作。
select * from settings order by rand() limit 10;每次运行时都会给出不同的随机选择。 -
@DavidFairbanks - 我刚刚建立了表格结构。每次运行它都会得到相同的数据。
标签: mysql