MySQL选择计数

MySQL选择计数,mysql,count,Mysql,Count,我试图从下面的查询中统计至少有一种产品的公司数量 SELECT count(*) FROM company c JOIN product p on c.id = product.company_id WHERE p.is_deleted = 0 AND c.is_customer = 1 AND c.company_type_id = 5 GROUP by c.id 所以,这显示了所有公司的列表,以及每个公司的产品数量 我试图实现的是从上述结果中统计出一些公司 这可以通过以下方式实现: SEL

我试图从下面的查询中统计至少有一种产品的公司数量

SELECT count(*)
FROM company c
JOIN product p on c.id = product.company_id
WHERE p.is_deleted = 0
AND c.is_customer = 1
AND c.company_type_id = 5
GROUP by c.id
所以,这显示了所有公司的列表,以及每个公司的产品数量

我试图实现的是从上述结果中统计出一些公司

这可以通过以下方式实现:

SELECT count(*)
FROM ( 
    SELECT count(*)
    FROM company c
    JOIN product p on c.id = product.company_id
    WHERE p.is_deleted = 0
    AND c.is_customer = 1
    and c.company_type_id = 5
    GROUP by c.id) AS t1

因此,这给了我正确的结果,但我只是想知道是否有更有效的方法来做事情。

我相信您可以将其简化为:

SELECT count(distinct c.id)
FROM company c
JOIN product p on c.id = product.company_id
WHERE p.is_deleted = 0
AND c.is_customer = 1
AND c.company_type_id = 5

看来你在这里干得不错。除非您真的遇到性能问题,否则我看不出有改进的余地。上面的查询将始终返回1?!你有一个
COUNT(*)
返回一个字段,然后你为一个字段再次
选择COUNT(*)
。@我遗漏了什么吗?@另一个:内部COUNT(*)有一个
分组依据
-它每个公司返回一个计数需要花费更多的时间阅读东西!错过了那里的
分组。你不仅仅是在计算不同的公司吗?不是每个公司都有不同的产品吗?@另一个我想这就是问题所在-至少有一种产品的公司数量。@另一个shubery:查询将计算结果中有多少唯一的公司ID,并且结果将只过滤到至少有一种产品的公司。做得很好@Blorgbeard-我站着更正是的,我很抱歉我看错了要求。是的,Blorgbeard是正确的。