Mysql 需要在SQL中从数据库中删除随机元组

Mysql 需要在SQL中从数据库中删除随机元组,mysql,sql,database,greatest-n-per-group,Mysql,Sql,Database,Greatest N Per Group,我们正在聘请一些第三方测试工程师和程序员来帮助我们解决网站上的一些错误。他们将为我们的web应用程序进行测试版安装。问题是我们需要给他们一份我们数据库的副本,我们不想给整个数据库,这是一个庞大的公司数据库。所以我们想给他们一个淡化的版本,它只有不到实际数据的一小部分——刚好足够做一个适当的测试 我们有以下模式中的数据: COMPANIES ID|NAME|CATEGORY|COUNTRY_ID..... 我们也有一些类别和国家 问题是,我们不希望删除太随机,基本上是在成千上万的条目中,我们需要

我们正在聘请一些第三方测试工程师和程序员来帮助我们解决网站上的一些错误。他们将为我们的web应用程序进行测试版安装。问题是我们需要给他们一份我们数据库的副本,我们不想给整个数据库,这是一个庞大的公司数据库。所以我们想给他们一个淡化的版本,它只有不到实际数据的一小部分——刚好足够做一个适当的测试

我们有以下模式中的数据:

COMPANIES
ID|NAME|CATEGORY|COUNTRY_ID.....
我们也有一些类别和国家

问题是,我们不希望删除太随机,基本上是在成千上万的条目中,我们需要给他们一个版本,有几百条条目,但这样,每个国家和类别至少有2-3家公司

我有点困惑,因为如何使用上面的限制执行select查询,更不用说delete了


我们将在这里使用MySQL数据库。这甚至可以在SQL中完成,或者我们需要用php或其他语言编写脚本吗?

我不确定我的答案是否符合您的需要,因为我所做的一些假设可能是错误的,但您可以尝试以下方法:

select category, country_id, min(id) id1, max(id) id2
  from companies
 group by country_id, category
 order by country_id, category
此查询只提供2个公司id,而不是3个,它们将是第一个和最后一个与类别和国家匹配的id

请注意,我是在脑子里写的,没有MySQL引擎来测试它


希望这对您有所帮助,或者至少给您一个提示。

以下选择语句将按升序为每个
类别、国家/地区id
组合选择具有前3个
id
的公司:

select id, name, category, country_id
from companies c1
where id in (
              select id
              from companies c2
              where c2.category=c1.category and c2.countr_id=c1.country_id
              order by id
              limit 3
            );

这看起来像是我可以使用的东西,但是我如何设置它来检索3个或更多ID?where子句cross product是redundent。如果没有where子句,它会很好地工作。是的,@Raihan,我想我写答案时在想别的事情。我将编辑我的答案以删除where子句。这是一种比我的更好的方法。:-)@Guillem如果任何两个id都足够,您的解决方案将更有效。是的,但是由于OP在对我的答案的评论中询问了如何将其设置为检索3个或更多id,我想您的答案比我的更适合他的需要