有 3 个实体,根据其他 2 个实体的关系数(计数)得到第三个实体
Having 3 Entities, get the third Entity as a result, based on the number of relations(count) of the other 2 Entities
我有 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,一个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 进行排序。
我不知道如何按计数处理这个订单。
预期 - 示例:
因此,如果对于类型 I select name
: 'alpha' 对应于 id 1
Type
和id 1
对应的item_id
分别是:1,3,4
ID 1,3
对应 owner_id
的项目是 1(count=2)。
id为4
对应owner_id
的Item是3(count=1)。
所以结果(按顺序)将是 owner1, owner3
你可以试试下面的-
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
此查询将获取您想要的结果。它找到每个所有者拥有的所有项目,然后按项目类型过滤它们以仅包括 alpha
类型的项目,然后对所有者拥有的项目数量进行 COUNT
并将结果排序该值降序:
SELECT t.name, o.name, COUNT(i.id) AS num_type
FROM Owner o
JOIN Item i ON i.owner_id = o.id
JOIN Item_Type it ON it.item_id = i.id
JOIN Type t ON t.id = it.type_id
WHERE t.name = 'alpha'
GROUP BY t.name, o.name
ORDER BY num_type DESC
输出:
name name num_type
alpha owner1 2
alpha owner3 1
我有 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,一个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 进行排序。
我不知道如何按计数处理这个订单。
预期 - 示例:
因此,如果对于类型 I select name
: 'alpha' 对应于 id 1
Type
和id 1
对应的item_id
分别是:1,3,4
ID 1,3
对应 owner_id
的项目是 1(count=2)。
id为4
对应owner_id
的Item是3(count=1)。
所以结果(按顺序)将是 owner1, owner3
你可以试试下面的-
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
此查询将获取您想要的结果。它找到每个所有者拥有的所有项目,然后按项目类型过滤它们以仅包括 alpha
类型的项目,然后对所有者拥有的项目数量进行 COUNT
并将结果排序该值降序:
SELECT t.name, o.name, COUNT(i.id) AS num_type
FROM Owner o
JOIN Item i ON i.owner_id = o.id
JOIN Item_Type it ON it.item_id = i.id
JOIN Type t ON t.id = it.type_id
WHERE t.name = 'alpha'
GROUP BY t.name, o.name
ORDER BY num_type DESC
输出:
name name num_type
alpha owner1 2
alpha owner3 1