SQL每行返回n行值

时间:2013-05-06 13:21:11

标签: sql oracle greatest-n-per-group

问候所有国家的SQL人员。

简单的问题,希望是一个简单的答案。

我有一个包含人员信息的Oracle数据库表。列是:

FirstName, LastName, BirthDate, BirthCountry

让我们说在这张桌子上我有1500人出生在阿鲁巴(BirthCountry =“Aruba”),678 Botswanans(BirthCountry =“Botswana”),13338加拿大人(BirthCountry =“Canadia”)。

我需要写什么查询从每个国家/地区提取10个样本的样本?无论哪个10,只要有10个就没关系。

这一个查询将从每个BirthCountry输出30行,10行。

2 个答案:

答案 0 :(得分:4)

这将从每个国家/地区中选出10个最年轻的人:

SELECT  *
FROM    (
        SELECT  p.*,
                ROW_NUMBER() OVER (PARTITION BY birthCountry ORDER BY birthDate DESC) rn
        FROM    persons p
        )
WHERE   rn <= 10

答案 1 :(得分:1)

每次运行查询时,这会挑选十个随机人员,不同的人:

select  *
from    (
        select  row_number() over (partition by BirthCountry 
                                   order by dbms_random.value) as rn
        ,       FirstName
        ,       LastName
        ,       BirthDate
        ,       BirthCountry
        from    YourTable
        )
where   rn <= 10