2017-07-12 4 views
0

SQLクエリで手伝ってください。ここでは、データとテストテーブルを行く:Select Idで列の値はすべて

CREATE TABLE "Cats" 
(
    "CatId" SERIAL PRIMARY KEY, 
    "Name" character varying NOT NULL 
); 
CREATE TABLE "Measures" 
(
    "MeasureId" SERIAL PRIMARY KEY, 
    "CatId" integer NOT NULL REFERENCES "Cats", 
    "Weight" double precision NOT NULL, 
    "MeasureDay" integer NOT NULL 
); 

INSERT INTO "Cats" ("Name") VALUES 
    ('A'), ('B'), ('C') 
; 
INSERT INTO "Measures" ("CatId", "Weight", "MeasureDay") VALUES 
    (1, 5.0, 1), 
    (1, 5.3, 2), 
    (1, 6.1, 5), 
    (2, 3.2, 1), 
    (2, 3.5, 2), 
    (2, 3.8, 3), 
    (2, 4.0, 4), 
    (2, 4.0, 5), 
    (3, 6.6, 1), 
    (3, 6.9, 2), 
    (3, 7.0, 3), 
    (3, 6.9, 4) 
; 

は、どのように私はすべての5日間の措置を持っているそれらのCATIDを選択します(MeasureDayは(1、2、3、4、5)のすべての値をとりますか)? CatId = 2のCatのみがすべての日数(1,2,3,4,5)の測定値を持つため、このテストデータでは、クエリは2を返します。

私はGROUP BY "CatId"とHAVING句を使用する必要があると仮定しますが、どのような種類のクエリがHAVING内にあるべきですか?

答えて

1

は、私はあなたの迅速かつうまく機能して答えを感謝group by

select CatId 
from Measures 
where MeasureDay in (1, 2, 3, 4, 5) 
group by CatId 
having count(distinct MeasureDay) = 5; 
+0

おそらく、3行目は 'MeasureDay in(1,2,3,4,5)'でなければなりません。あなたは答えが完璧に働いています。ありがとうございました! –

+0

@СергейВеселовский、LOL ...ええ。それを逃した – Rahul

0

あなたは集約とhaving句を使用することができます

select m.CatId 
from measures m 
group by m.CatId 
having count(distinct measureDay) = 5; 
+0

を使用して、このようにしてみてください。 MeasureDay in(1,2,3,4,5)の行を追加すると、他の日(たとえば7日目)の測定値がクエリから除外される可能性があるため、完了します。 –

関連する問題