5

我有以下数据库表

categories
id, name

products
category_id, id, product_name, user_id

product_comments
product_id, id, comment_text, user_id

我需要计算 products 和 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

4 回答 4

7

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

SELECT COUNT(DISTINCT user_id)
FROM products
LEFT JOIN product_comments comm ON products.id = comm.product_id
于 2013-05-01T15:51:30.770 回答
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; 
于 2013-05-01T15:52:23.417 回答
0
select user_id from products
UNION
select user_id from product_comments

这将为您提供表中存在的不同用户 ID 列表。用户可能只出现在其中一个表中,或者两者都出现,并且仍将包含在列表中。

于 2013-05-01T15:50:05.850 回答
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
于 2013-05-01T15:51:42.527 回答