繁体   English   中英

计算不在另一个表中的行

[英]Count rows that are not in another table

我有以下表格用于管理已将哪个配置文件用于什么服务。

资料表

CREATE TABLE public.profile
(
    id integer NOT NULL DEFAULT nextval('profile_id_seq'::regclass),
    name text COLLATE pg_catalog."default" NOT NULL,
    CONSTRAINT profile_id PRIMARY KEY (id)
)

服务表

CREATE TABLE public.service
(
    id integer NOT NULL DEFAULT nextval('service_id_seq'::regclass),
    name text COLLATE pg_catalog."default" NOT NULL,
    CONSTRAINT service_id PRIMARY KEY (id)
)

二手桌子

CREATE TABLE public.used
(
    id integer NOT NULL DEFAULT nextval('used_id_seq'::regclass),
    service_id bigint NOT NULL,
    profile_id bigint NOT NULL,
    insert_timestamp timestamp with time zone NOT NULL DEFAULT now(),
    CONSTRAINT used_id PRIMARY KEY (id),
    CONSTRAINT used_profile_id_fkey FOREIGN KEY (profile_id)
        REFERENCES public.profile (id) MATCH SIMPLE
        ON UPDATE CASCADE
        ON DELETE CASCADE,
    CONSTRAINT used_service_id_fkey FOREIGN KEY (service_id)
        REFERENCES public.service (id) MATCH SIMPLE
        ON UPDATE CASCADE
        ON DELETE CASCADE
)

我正在尝试创建一个SQL查询,该查询将计算profile_id不在特定服务的used表中的总配置文件。 假设我们的服务称为“ gym”,如何计算服务名称为“ gym”的未使用表中的概要文件数量?

首先,您需要将used表与service表连接起来,以访问每个used记录的service text 然后,您需要添加service text等于gym的条件,最后通过not in使用条件,您可以选择所提供的子查询中不存在的配置文件数量。

select count(*) from public.profile
where id not in
(select u.profile_id from public.used u inner join public.service s
 on s.id = u.service_id
where s.text = 'gym')

暂无
暂无

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

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