我有以下数据库表
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
答案 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