2017-07-27 14 views
1

は私が各カテゴリSQLの動的カウントを選択

create table foo(name text, category text); 

name | category 
------+---------- 
aaa | cat1 
bbb | cat1 
ccc | cat2 
ddd | cat2 
eee | cat2 

からN行を選択したいのですが、そこからテーブルfooを持っている今、私はカテゴリ

の番号を指定するFOOから選択したいとし
category | count 
----------+------- 
cat2  |  2 
cat1  |  1 

結果は3行であるべきでは

name 
------ 
ccc 
ddd 
aaa 

-- wrong, not taking counts into account 
with t as (select * from (values ('cat1', 1), ('cat2', 2)) as 
t(category, count)) select name from foo, t where foo.category = t.category; 

name 
------ 
aaa 
bbb 
ccc 
ddd 
eee 

(タイは、ランダムに、または任意の順序で解決することができます)私は複数のクエリでこれを行うことができますが、私は何かが非常に明白でなくなっていると思うし、選択は単一のクエリで行うことができます。

答えて

1

あなたはrow_number()使用します。

select foo.* 
from (select t.*, 
      row_number() over (partition by foo.category order by foo.category) as seqnum 
     from foo join 
      t 
      on foo.category = t.category 
    ) t 
where seqnum <= t.cnt; 
関連する問題