如何在连接多个表时统计不同值的数量?
问题描述:
我有以下的数据库表如何在连接多个表时统计不同值的数量?
categories
id, name
products
category_id, id, product_name, user_id
product_comments
product_id, id, comment_text, user_id
我需要在产品和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
答
select user_id from products
UNION
select user_id from product_comments
这会给你存在的表中的用户ID的不同列表。用户可以只出现在其中一个表格中,或者两者都包含在列表中。
答
这会给你一个整体计数,而不是所有不同ID的列表:
SELECT COUNT(DISTINCT user_id)
FROM products
LEFT JOIN product_comments comm ON products.id = comm.product_id
答
您可以使用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
答
如果你想不同的用户,那么你可以尝试这样的:
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;
+0
如何在使用上述查询时获得分类数据? – user1421214 2013-05-01 16:01:12
有2个不同的user_ids ... product.userid,product_comments.userid ...我不认为上面会工作? – user1421214 2013-05-01 16:02:00
对不起 - 你是对的。你最好使用@Adam的'UNION'查询答案并在其周围包装一个'COUNT'。至于我,是时候多喝咖啡:) – 2013-05-01 16:04:45