2016-09-05 8 views
0

私はこの質問を持っている:Postgresの選択クエリ

select p.marker,p.type,speed 
    from product as p 
    join pc as pc on(p.model = pc.model) 
    order by marker,speed 

私はテーブルを見ることができます:

は、少なくとも3つの貴様を搭載したPCマーカーがこのクエリを使用して

をスピード検索すべてのマーカー、モデル、およびそれらの特定のスピードで。しかし、どのように3つ以上のスピードを持つマーカだけを表示できますか?このクエリーを使用して、どのマーカーに3以上のマーカーがあるかを識別できますが、私は正確に答えを求めます。それでは、私が望むマーカーだけを返します。

+0

使用 'GROPY BY'と' HAVING' –

答えて

0

HAVINGとすれば十分です。

異なる速度のソリューションが必要な場合は、条件をcount(distinct speed) >= 3に置き換えます。

select p.marker, p.type 
from product as p 
join as pc on p.model = pc.model 
group by 1,2 
having count(pc.speed) >= 3 
order by 1,2 

グループと順序の数値は、select句内の列に効果的にマップされます。

0

さてあなたはCOUNT()する必要があり、その後、あなたがに関する情報が必要な場合は、その後、それはgroup by句であるべきJOIN

よう
select p.marker,p.type, xxx.speed 
    from product as p 
    join (select count(distinct speed) as speed, model 
      from pc 
      group by model 
      having count(distinct speed > 3) xxx on p.model = xxx.model 
    order by p.marker,xxx.speed; 
0

を実行 - 何もありません。残りは、テーブルを結合するだけでhaving句とjoin次のとおりです。

select p.marker, count(distinct speed) as num_speeds 
from product p join 
    pc 
    on p.model = pc.model 
group by p.marker 
having count(distinct speed) >= 3;