由于我是SQL的初学者,所以我无法用简单的方式描述问题,所以让我给你看一个例子:
3张桌子:
产品
组
人
如您所见,GROUP可以有多个PERSON,并且PRODUCT可以与GROUP和PERSON连接。
从这一点出发,我想计算在GROUP内拥有PRODUCT的PERSON的人数
我不太了解IN的背景或在FROM中使用另一个SELECT,因此,如果那是重点,那么我很高兴自己比它还领先一步。
SELECT
group.name as GROUP_name,
COUNT(DISTINCT person_id) AS PERSON_having_min_one_PRODUCT
FROM products
LEFT JOIN groups ON groups.id = products.group_id
LEFT JOIN persons ON persons.id = products.person_id;
使用此数据:
GROUP
ExampleGroupName1 has 3 PERSONs, but 2 of them has >0 PRODUCTS
ExampleGroupName2 has 3 PERSONs and all of them has >0 PRODUCTS
ExampleGroupName3 has 2 PERSONs, but none of them has the PRODUCT
ExampleGroupName4 has 2 PERSONs, but only 1 has >0 PRODUCT
我想要这样的输出:
GROUP_name | PERSON_having_min_one_PRODUCT
ExampleGroupName1 | 2
ExampleGroupName2 | 3
ExampleGroupName4 | 1
答案 0 :(得分:0)
我想计算在GROUP中拥有PRODUCT的PERSONs的人数
注意:我将假设表product
没有列group_id
,因为它是多余的并且会导致很多错误。
以下查询将通过联接表person
和product
向您显示所需的结果:
select
count(distinct x.id)
from person x
join product p on p.person_id = x.id
where x.group_id = 123 -- choosing a specific group
and p.id = 456 -- choosing a specific product
答案 1 :(得分:0)
这将很简单,如以下所示,这意味着所有带有group_id
和count(persons)
的组,以及那些通过在haveing子句中使用id拥有乘积的人
Select group_id,
count( distinct id ) AS "PERSON_WITH_PRODUCT"
from
person group by group_id having id
in (Select id from product);