SQL查询 - 如何限制每个特定列的行数

时间:2014-03-04 13:39:34

标签: sql oracle

我需要对一组产品进行抽样。产品属于某种形式。表格可以映射到某些目录。

例如,form = 1523映射到catalog = 5和catalog = 8

我需要在特定表格上运行,并从每个目录中最多带来750个产品。

我想过使用限制(RowNum< = 750 *目录数量),但我不明白我如何限制每个目录而不是总查询结果。

另外,我之前并不了解特定表格中有多少目录。

例如,假设我每个目录只需要2行。我的样本是:

Product  Form   Catalog
-----------------------
1        50     5
2        50     6
3        50     6
4        50     6

如何从目录6中获得产品1和2随机产品的结果?

1 个答案:

答案 0 :(得分:4)

您可以使用分析函数row_number():

select product, form, catalog from
( select product, form, catalog,
         row_number() over (partition by catalog order by product, form) as rn
  from mytable
)
where rn <= 750

partition by catalog子句获取目录中的行号。您需要将order by子句放在那里,但是您可能希望以不同的顺序排序,这取决于您。