Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 分组方式和跨表联接计数?_Postgresql - Fatal编程技术网

Postgresql 分组方式和跨表联接计数?

Postgresql 分组方式和跨表联接计数?,postgresql,Postgresql,我在研究生9.6班工作。我有一个资产表: CREATE TABLE assets ( name varchar, company_number varchar ); 公司表(这两个字段中的公司编号是相关的,尽管没有正式的外键)-一家公司可以拥有许多资产: CREATE TABLE companies ( company_number varchar primary key, name varchar ); 还有一张公司董事表,带有公司的外键-一家公司可以有许多

我在研究生9.6班工作。我有一个资产表:

CREATE TABLE assets (
    name varchar,
    company_number varchar
);
公司表(这两个字段中的
公司编号
是相关的,尽管没有正式的外键)-一家公司可以拥有许多资产:

CREATE TABLE companies (
    company_number varchar primary key,
    name varchar
);
还有一张公司董事表,带有公司的外键-一家公司可以有许多董事:

CREATE TABLE directors (
    id serial primary key,
    company_number varchar REFERENCES companies(company_number),
    person_name varchar
);
我可以得到大多数公司中董事参与的排名列表,如下所示:

SELECT person_name, count(*) AS num_companies 
  FROM directors 
  GROUP BY person_name
  ORDER BY num_companies DESC;
我可以得到每个董事拥有的资产数量的排名列表,如下所示(我认为这是正确的):

但是我如何在一个命令中同时获得这两个命令呢?换句话说,我想要一份完整的董事名单,包括他们参与的公司数量以及这些公司控制的资产数量

更新:根据要求,下面是创建表和数据的SQL示例:

CREATE TABLE assets (
    name varchar,
    company_number varchar
);
INSERT INTO assets VALUES ('foo', 1), ('bar', 1), ('baz', 2), ('bar', 2), ('fii', 3);
CREATE TABLE companies (
    company_number varchar primary key,
    name varchar
);
INSERT INTO companies VALUES (1, 'acme corp'), (2, 'intergalactic holdings inc'), (3, 'intergalactic shellco inc');
CREATE TABLE directors (
    id serial primary key,
    company_number varchar REFERENCES companies(company_number),
    person_name varchar
);
INSERT INTO directors(company_number, person_name) VALUES (1, 'arthur dent'), (1, 'trillian'), (2, 'ford prefect'), (3, 'ford prefect');
以下是我想要得到的结果:

person_name,num_companies,num_assets
ford prefect,2,3
arthur dent,1,2
trillian,1,2
我想要一份完整的董事名单,包括他们参与的公司数量以及这些公司控制的资产数量

如果我理解正确,你需要这样的东西:

select directors.person_name, count(distinct directors.company_number) as company_count, count(distinct name) as asset_count
from directors
join assets
on directors.company_number = assets.company_number
group by directors.person_name;

请使用创建样本数据并发布所需的output@lad2025谢谢,我在那个网站上有点纠结(不知道如何在一把小提琴中清除状态,或者编辑一把新小提琴!),但已经发布了一个更新。
select directors.person_name, count(distinct directors.company_number) as company_count, count(distinct name) as asset_count
from directors
join assets
on directors.company_number = assets.company_number
group by directors.person_name;