2011-09-01 13 views
5

आमतौर पर मुझे एसक्यूएल प्रश्नों के साथ बहुत आश्वस्त लगता है, हालांकि इसने मुझे अपने सिर को खरोंच कर दिया है। मुझे ऐसा लगता है - एक त्वरित फिक्स हो, लेकिन मैं इसे देख नहीं रहा हूं।MySQL: स्तंभों से अलग से कैसे गिनें?

मैं एक ही तालिका में एक ही तालिका में एकाधिक मानों पर एक गिनती करने की कोशिश कर रहा हूं।

"0000000000000000" पर ध्यान न दें यह केवल एक खाली बाइट सरणी का प्रतिनिधित्व करता है।

क्या इन प्रश्नों को गठबंधन करने का कोई आसान तरीका है?

SELECT COUNT(ssn) 
FROM patients 
WHERE ssn="0000000000000000"; 

SELECT COUNT(firstname) 
FROM patients 
WHERE firstname="0000000000000000" 

SELECT COUNT(lastname) 
FROM patients 
WHERE lastname="0000000000000000" 

etc... 

उत्तर

2

आप कुछ इस तरह कर सकते हैं -

SELECT COUNT(ssn) AS patient_count, 'ssn' AS count_type 
FROM patients 
WHERE ssn="0000000000000000"; 
UNION 
SELECT COUNT(firstname) AS patient_count, 'firstname' AS count_type 
FROM patients 
WHERE firstname="0000000000000000" 
UNION 
SELECT COUNT(lastname) AS patient_count, 'lastname' AS count_type 
FROM patients 
WHERE lastname="0000000000000000" 
+0

क्या कोई तरीका है जिससे मैं टेबल को पिवोट कर सकता हूं? मेरा मतलब है कि मेरे टाइल्स हेडर के रूप में अच्छा होगा, मूल्यों के नहीं। – theangryhornet

+2

आप यूनियन के बजाय यूनियन को सभी डाल सकते हैं, बस SQL ​​सर्वर को थोड़ा अनावश्यक काम सहेजने के लिए। – James

1

यूनिअन साथ प्रयास करें

SELECT COUNT(ssn) 
FROM patients 
WHERE ssn="0000000000000000"; 
UNION 
SELECT COUNT(firstname) 
FROM patients 
WHERE firstname="0000000000000000" 
UNION  
SELECT COUNT(lastname) 
FROM patients 
WHERE lastname="0000000000000000" 
+2

आप यहां 'यूनियन ऑल' का उपयोग करना चाहते हैं। यदि दो (या यहां तक ​​कि सभी तीन) की गणना समान होती है, तो 'यूनियन' उन्हें डुप्लिकेट के रूप में खत्म कर देगा। –

+0

यह सुनिश्चित नहीं है कि मुझे यह पसंद है, क्योंकि आप इस बात को अलग नहीं कर सकते कि कौन सी गणनाएं हैं। – theangryhornet

+0

आप इस –

6
SELECT SUM(CASE WHEN ssn = '0000000000000000' THEN 1 ELSE 0 END) AS ssn_count, 
     SUM(CASE WHEN firstname = '0000000000000000' THEN 1 ELSE 0 END) AS first_count, 
     SUM(CASE WHEN lastname = '0000000000000000' THEN 1 ELSE 0 END) AS last_count 
    FROM patients 
    WHERE ssn = '0000000000000000' 
     OR firstname = '0000000000000000' 
     OR lastname = '0000000000000000' 
+0

को हल करने के लिए विवरण के साथ एक और कॉलम डाल सकते हैं यह बहुत अच्छा ठंडा है। आपको लगता है कि यह नीचे "संघ" समाधान के प्रदर्शन में तुलना करता है? – Marvo

+3

@ मारवो: मेरा मानक उत्तर दोनों की कोशिश करें और तुलना करें। मुझे लगता है कि यह बेहतर होगा क्योंकि यह 1 चुनिंदा बनाम 3. –

+0

बहुत ही रोचक दृष्टिकोण है! – theangryhornet

1

मुझे लगता है कि यह काम करेगा?

SELECT * 
FROM 
(SELECT COUNT(ssn) AS ssn_count 
FROM patients 
WHERE ssn="0000000000000000") AS ssn 
CROSS JOIN 
(SELECT COUNT(firstname) AS firstname_count 
FROM patients 
WHERE firstname="0000000000000000") AS firstname 
CROSS JOIN 
(SELECT COUNT(lastname) AS lastname_count 
FROM patients 
WHERE lastname="0000000000000000") AS lastname 
संबंधित मुद्दे