SQL-计算另一个表有多少关联记录

时间:2019-01-09 18:41:44

标签: mysql sql relational-database

由于我是SQL的初学者,所以我无法用简单的方式描述问题,所以让我给你看一个例子:

3张桌子:

产品

  • id
  • group_id
  • person_id

  • id
  • 名称

  • id
  • group_id

如您所见,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

2 个答案:

答案 0 :(得分:0)

  

我想计算在GROUP中拥有PRODUCT的PERSONs的人数

注意:我将假设表product没有列group_id,因为它是多余的并且会导致很多错误。

以下查询将通过联接表personproduct向您显示所需的结果:

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_idcount(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);
相关问题