sql - 有 3 个实体,根据其他 2 个实体的关系数(计数)得到第三个实体

标签 sql postgresql postgresql-10

我有 3 个实体,类型、项目、所有者

拥有者

id name
1   owner1
2   owner2
3   owner3

一个所有者可以拥有多个项目

Item

id   name  owner_id
1   item1  1
2   item2  1
3   item3  1 
4   item4  3
5   item5  2

Type 

id name
1  alpha 
2  beta

Item 和 Type 之间存在多对多关系。一个Item可以有多个Type,一个Type可以有多个Item

Item_Type

id item_id type_id

1   1       1
2   1       2 
3   3       1
4   4       1

按名称给出类型,我需要获取所有拥有该类型项目的所有者,并按每种类型的项目数量排序。

我正在使用 PostgreSQL 10。

所以我开始:

SELECT Type.name, Item_Type.item_id from Type WHERE Type.name = 'my_var' INNER JOIN Item_Type ON Type.id = Item_Type.type_id

所以我需要对每个类型的项目进行计数,然后根据计数对 Owners DISTINCT 进行排序。

我不知道如何按计数处理这个订单。

预期 - 示例:

因此,如果我为类型选择 name : 'alpha' 对应于 id 1

id为1Type对应的item_id为:1,3,4

id为1,3的Item(s)对应owner_id为1(count=2)。 id为4的Item对应的owner_id为3(count=1)

所以结果(按顺序)将是 owner1, owner3

最佳答案

你可以试试下面-

DEMO

select d.name as ownername,count(distinct c.name) as itemcount from 
Item_Type a 
inner join Types b on a.type_id=b.id
inner join Item c on a.item_id=c.id
inner join Owner d on c.owner_id=d.id
group by d.name

关于sql - 有 3 个实体,根据其他 2 个实体的关系数(计数)得到第三个实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54624734/

相关文章:

php - 无法在我的 IBM CLoud 中的 PHP Cloud Foundry 应用程序和 Postgresql 之间建立连接

php - Base64解码图片存入blob数据库

没有模式名称的 postgresql pg_dump

postgresql - 尝试转储在 CentOS 7 机器上运行的 PostgreSQL-10 数据库并将其恢复到 Windows 10 机器中

mysql - LEFT JOIN 显示与 RIGHT JOIN 不同的结果 - 当自己连接表时......为什么?

php - 更新先前使用 MYSQL 和 PHP 选择的一组行

xml - Postgres : using table_to_xmlschema on a table with a Box element

mysql - 如何从此查询中消除 "Out of Memory Exception"?

SQL varchar 变量插入问号