繁体   English   中英

选择ID,其中列将采用所有值

[英]Select Id where column takes all values in

请帮助我进行SQL查询。 这里有数据测试表:

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)中的所有值)? 在此测试数据上,查询应该返回2,因为只有CatId = 2的Cat才具有整天(1、2、3、4、5)的度量。

我假设我应该使用GROUP BY“ CatId”和HAVING子句,但是在HAVING中应该使用哪种查询?

像这样使用group by尝试

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

您可以使用聚合和having子句:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM