2011-03-16 14 views
8

मैं कंपनियों निम्न क्वेरीMySQL का चयन गिनती

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

+0

निश्चित रूप से उपर्युक्त क्वेरी हमेशा 1 लौट जाएगी ?! आपके पास एक COUNT (*) 'है जो एक फ़ील्ड देता है, फिर आप एक फ़ील्ड के लिए फिर से COUNT (*)' चुनें ... क्या मुझे कुछ याद आ रहा है? – anothershrubery

+0

@ अन्य: आंतरिक गिनती (*) में 'समूह' है - यह प्रति कंपनी एक गिनती देता है – Blorgbeard

उत्तर

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

+0

@ अन्यथा मुझे लगता है कि सवाल यही है - कम से कम एक उत्पाद वाली कंपनियों की संख्या। – Blorgbeard

+0

@anothershrubery: क्वेरी गिनती होगी कि नतीजे कितने अद्वितीय कंपनी आईडी हैं, और नतीजा केवल उन कंपनियों को फ़िल्टर किया जाता है जिनमें कम से कम एक उत्पाद है। बहुत अच्छी नौकरी @ ब्लॉगरबीर्ड - मैं सही – BigFatBaby

संबंधित मुद्दे