2009-09-25 14 views
5
SELECT student_id, section, count(*) as total 
FROM raw_data r 
WHERE response = 1 
GROUP BY student_id, section 

परीक्षण पर 4 अनुभाग हैं, प्रत्येक में अलग-अलग प्रश्न हैं। मैं जानना चाहता हूं, प्रत्येक छात्र के लिए, और प्रत्येक खंड के लिए, उन्होंने सही तरीके से कितने प्रश्नों का उत्तर दिया (प्रतिक्रिया = 1)।mysql SELECT COUNT (*) ... ग्रुप बाय ... पंक्तियों को वापस नहीं कर रहा है जहां गिनती शून्य है

हालांकि, इस प्रश्न के साथ, यदि किसी छात्र को किसी दिए गए अनुभाग में कोई प्रश्न नहीं मिलता है, तो वह पंक्ति मेरे परिणाम सेट से पूरी तरह गायब हो जाएगी। मैं कैसे सुनिश्चित कर सकता हूं कि प्रत्येक छात्र के लिए, 4 पंक्तियां हमेशा वापस आती हैं, भले ही पंक्ति के लिए "कुल" 0 है?

यहाँ मेरी परिणाम सेट की तरह दिखता है:

student_id section  total 
1   DAP--29  3 
1   MEA--16  2 
1   NNR--13  1 --> missing the 4th section for student #1 
2   DAP--29  1 
2   MEA--16  4 
2   NNR--13  2 --> missing the 4th section for student #2 
3   DAP--29  2 
3   MEA--16  3 
3   NNR--13  3 --> missing the 4th section for student #3 
4   DAP--29  5 
4   DAP--30  1 
4   MEA--16  1 
4   NNR--13  2 --> here, all 4 sections show up because student 4 got at least one question right in each section 

किसी भी जानकारी के लिए धन्यवाद!

अद्यतन: मैं

SELECT student_id, section, if(count(*) is null, 0, count(*)) as total 

की कोशिश की और कहा कि सभी पर परिणाम नहीं बदला। अन्य विचार?

अद्यतन 2: मैं इसे नीचे प्रतिक्रिया के लिए धन्यवाद काम कर रहा है:

SELECT student_id, section, SUM(CASE WHEN response = '1' THEN 1 ELSE 0 END) AS total 
FROM raw_data r 
WHERE response = 1 
GROUP BY student_id, section 
+0

आपको यह दिखाने की ज़रूरत है कि इनपुट कैसा दिखता है। –

उत्तर

9
SELECT student_id, section, sum(case when response=1 then 1 else 0 end) as total 
FROM raw_data_r GROUP BY student_id, section 

नोट यह है कि कोई WHERE हालत।

+1

केस जब कोड बिल्कुल वही था जो मुझे चाहिए था। धन्यवाद! – Jen

0

अगर आप छात्र जानकारी के साथ एक अलग तालिका है, तो आप उस तालिका से छात्रों का चयन करें और छोड़ दिया जा सकता है data_raw मेज पर परिणाम में शामिल होने:

SELECT si.student_name, rd.student_id, rd.section, rd.count(*) AS total 
    FROM student_info AS si LEFT JOIN raw_data AS rd USING rd.student_id = si.student_id 

इस तरह, यह पहली बार सभी छात्रों का चयन करता है, तो कार्यान्वित गिनती कमांड।

1
SELECT r.student_id, 
      r.subject, 
      sum(r.response) as total 
     FROM raw_data r 
    GROUP BY student_id, subject 
संबंधित मुद्दे