我有一个看起来像这样的简单表:
USER_NAME STATUS
------------------
Paul 1
John 4
Brad 1
Simon 1
Jack 4
我有10种不同的状态和大约2000行(用户)。
我想从生产数据库中的每个状态导出一小部分行样本。然后我将在我的开发数据库中导入它们以运行测试
我想要一个查询,为status
字段的每个值选择一些(比如3个)行
我怎么能实现这一目标?我是否必须在STATUS上进行循环并使用LIMIT?
非常感谢!
编辑:为清晰起见而编辑
答案 0 :(得分:1)
您可以针对单个状态尝试此查询,您可以通过更改数字来扩展它...
SELECT * FROM tbl_name JOIN users ON ( users.Status = status.Id ) WHERE status.Id = 1 GROUP BY status LIMIT 3
答案 1 :(得分:1)
对于此大小的数据,最简单的方法是使用union all
:
(select t.* from table t where status = 1 order by rand() limit 3)
union all
(select t.* from table t where status = 2 order by rand() limit 3)
union all
. . .
union all
(select t.* from table t where status = 10 order by rand() limit 3)
还有其他方法可以表现得更好。但是这对你拥有的数据量来说应该是非常合理的。
答案 2 :(得分:0)
尝试此查询
SELECT users FROM table WHERE status = max(status)ORDER status LIMIT BY 3
答案 3 :(得分:0)
取自here:
SELECT a.user_name, a.status
FROM table AS a
LEFT JOIN table AS b
ON a.status = b.status
AND a.created_at <= b.created_at
GROUP BY a.id
HAVING count(*) <= 3
ORDER BY a.status
在MySQL 5.5上测试