2011-03-16 179 views
8

我想數着至少有一個產品從下列查詢MySQL的SELECT 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 

所以公司的數量,這說明我的所有公司的名單,以及產品對每個計公司。

我試圖實現的是從上述結果中計算出的公司數量。

這是可以實現如下:

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 

所以,這給了我正確的結果,但我只是想知道是否有做事情的更有效的方式。

+0

看來你在這裏做了很好的工作。我認爲沒有改善的餘地,除非你真的遭遇性能問題 – BigFatBaby 2011-03-16 11:11:40

+0

當然,上面的查詢將永遠返回1?!你有一個'COUNT(*)'返回一個單一的字段,然後你再次選擇COUNT(*)'單個字段...我錯過了什麼嗎? – anothershrubery 2011-03-16 11:26:50

+0

@another:內部計數(*)有'group by' - 每個公司返回一個計數 – Blorgbeard 2011-03-16 11:37:58

回答

9

我相信你可以把它簡化爲這樣:

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 
+0

你不只是指望這裏的不同公司?不是每家公司的獨特產品? – anothershrubery 2011-03-16 11:28:10

+0

@另一種我認爲這就是問題所在 - 至少有一種產品的公司數量。 – Blorgbeard 2011-03-16 11:36:51

+0

@anothershrubery:查詢將計算結果中有多少獨特的公司ID,並且結果僅過濾到至少有一個產品的公司。非常好的工作@Blorgbeard - 我站在更正 – BigFatBaby 2011-03-16 11:41:36