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

时间:2011-10-29 08:44:10

标签: mysql sql database greatest-n-per-group

我们正在招聘一些第三方测试工程师和程序员来帮助我们解决网站上的一些错误。他们将致力于我们的Web应用程序的beta版安装。问题是我们需要给他们一份我们的数据库,我们不想给整个数据库,它是一个巨大的公司数据库。因此,我们希望给它们一个淡化版本,它只有不到实际数据的一小部分 - 足以进行适当的测试。

我们有以下架构中的数据:

COMPANIES
ID|NAME|CATEGORY|COUNTRY_ID.....

我们还有一定数量的类别和国家。

问题在于我们不希望删除过于随机,基本上我们需要为他们提供数百个条目的数十万个条目,但是这样,你至少有2个条目每个国家和类别的-3家公司。

对于如何使用上述限制进行选择查询而言,我有点感到困惑。

这是我们将在这里使用的MySQL数据库。这甚至可以在SQL中完成,还是我们需要在php中制作脚本?

2 个答案:

答案 0 :(得分:1)

以下select语句将为每个id组合按升序选择前3 category, country_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
            );

答案 1 :(得分:0)

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

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引擎来测试它。

希望有助于或至少为您提供如何操作的提示。