2010-04-23 14 views
8

से मैं नीचे के रूप में एसक्यूएल hava: गिनती कॉलम समूह

select a.dept, a.name 
    from students a 
group by dept, name 
order by dept, name 

और परिणाम प्राप्त:

dept name 
-----+--------- 
CS | Aarthi 
CS | Hansan 
EE | S.F 
EE | Nikke2 

मैं सारांश के लिए नीचे के रूप में प्रत्येक विभाग के लिए छात्रों के संख्या हैं:

dept name  count 
-----+-----------+------ 
CS | Aarthi | 2 
CS | Hansan | 2 
EE | S.F  | 2 
EE | Nikke2 | 2 
Math | Joel  | 1 

मैं एसक्यूएल कैसे लिखूं?

+0

नज़र अनुरोध किया परिणाम देगा, नोटिस 2 के बाद सीएस और ई – BlackICE

+0

@zhangzhong विभागों: क्या डेटाबेस? –

उत्तर

14

(मैं मिनट पर परीक्षण करने के लिए किसी भी वातावरण नहीं मिला है), मैं केवल यह मान सकते हैं छात्र

select a.Dept, count(*) as TotalStudents 
    from students a 
    group by a.Dept 

प्रति वास्तविक नामांकन का एक और तालिका है आप eac की कुल संख्या चाहते हैं ज हर छात्र (जो मतलब नहीं है), तो आप शायद लगता है कि यह करना होगा के साथ जुड़े विभाग ...

select a.Dept, a.Name, b.TotalStudents 
    from students a, 
     (select Dept, count(*) TotalStudents 
      from students 
      group by Dept) b 
    where a.Dept = b.Dept 

अपने "नाम" स्तंभ के मेरे व्याख्या छात्र का नाम और न इस बात का है कक्षा के वास्तविक प्रशिक्षक इसलिए मेरे उप-चयन/शामिल हों। अन्यथा, दूसरों की तरह, केवल तीसरे कॉलम के रूप में COUNT (*) का उपयोग करना आवश्यक था।

6
select a.dept, a.name, 
     (SELECT count(*) 
      FROM students 
     WHERE dept = a.dept) 
    from students a 
group by dept, name 
order by dept, name 

यह कुछ हद तक संदिग्ध क्वेरी है, क्योंकि आपको विभाग की गणना की डुप्लिकेट प्रतियां मिलती हैं। छात्र सूची लाने के लिए क्लीनर होगा और विभाग अलग-अलग परिणामों के रूप में गिना जाता है। बेशक, दूसरे तरीके से जाने के व्यावहारिक कारण हो सकते हैं, इसलिए यह एक पूर्ण नियम नहीं है।

+1

गलत, यह – BlackICE

+0

के बाद 1 देता है धन्यवाद @ डेविड। –

+0

संपादित संस्करण सही है, और मुझे लगता है कि वास्तव में अन्य दो की तुलना में एसक्यूएल क्लीनर है जो सही हैं। – BlackICE

0

यह करना चाहिए हालांकि ऐसा लगता है आप सभी तालिकाओं नहीं दिखा रहे हैं

select a.dept, a.name, count(a.*) as NumOfStudents 
from students a 
group by dept, name order by dept, name 

HTH

+0

यह – BlackICE

1
SELECT dept, name, COUNT(name) as CT from students 
group by dept, name 
order by dept, name 
+0

के बाद 1 के बाद भी देता है यह – BlackICE

0

या अन्यथा बस लिखने

select dept, name, count(name) as nostud from students group by dept, name order by dept, name 
+0

विभाग के बाद भी 1 देता है यह डिप्टी के बाद 1 भी देता है – BlackICE

0

यह परिणाम लोगों को ऊपर

select a.dept, a.name, cnt 
from student a 
join (
select dept, count(1) as cnt 
from student 
group by dept 
) b on b.dept = a.dept 
संबंधित मुद्दे