如何在连接多个表时计算不同值的数量?

时间:2013-05-01 15:47:32

标签: mysql

我有以下数据库表

categories
id, name

products
category_id, id, product_name, user_id

product_comments
product_id, id, comment_text, user_id

我需要在product和product_comments表中计算不同用户的数量。我有以下查询,我选择所有那些至少有一个产品的类别,每个产品可能有零或一些评论......但我不知道的是如何得到这些不同的用户ID的总和..如果它只是来自一个表我会尝试COUNT(products.user_id)...。这是我的查询..

SELECT 
c.*
FROM categories c
INNER JOIN products p ON p.category_id = c.id
LEFT JOIN product_comments pc ON pc.product_id = p.id

我需要产品和product_comments表中不同用户ID的总数。

我希望结果数据有点像下面这样:

Category_id, Category_name, TotalUsers
1, Test Category, 10
2, Another Category, 5
3, Yet another cat, 3

4 个答案:

答案 0 :(得分:5)

这将为您提供整体计数,而不是所有不同ID的列表:

SELECT COUNT(DISTINCT user_id)
FROM products
LEFT JOIN product_comments comm ON products.id = comm.product_id

答案 1 :(得分:1)

如果您想要不同的用户,那么您可以尝试以下方式:

select distinct user_id from (
   select user_id from products
   UNION
   select user_id from product_comments
) as allusers; 

然后你可以计算它们:

select count(distinct user_id) from (
   select user_id from products
   UNION
   select user_id from product_comments
) as allusers; 

答案 2 :(得分:0)

select user_id from products
UNION
select user_id from product_comments

这将为您提供表中存在的用户ID的独特列表。用户可以只出现在其中一个表中,也可以出现在两个表中,并且仍然会包含在列表中。

答案 3 :(得分:0)

您可以使用DISTINCT关键字和COUNT()函数

SELECT DISTINCT
COUNT(c.*)
FROM categories c
INNER JOIN products p ON p.category_id = c.id
LEFT JOIN product_comments pc ON pc.product_id = p.id