आप केवल COUNT()
. जैसे समग्र कार्यों का उपयोग कर सकते हैं एक HAVING
. में खंड, या SELECT
. में क्लॉज जब एक GROUP BY
प्रयोग किया जाता है। WHERE
क्लॉज उन पंक्तियों पर काम करता है जो FROM
. से आती हैं खंड। कोई एकत्रीकरण नहीं हुआ है, इसलिए समग्र कार्यों के सार्थक होने का कोई तरीका नहीं है।
ऐसा लगता है कि आप जो करना चाहते हैं वह ENROLL तालिका से उन सभी छात्रों को ढूंढना है जो एक से अधिक बार उपस्थित होते हैं। फिर आप उन छात्रों के बारे में अधिक जानकारी प्राप्त करना चाहते हैं। ऐसा करने के संभावित रूप से कई तरीके हैं, लेकिन मैं एक सबक्वेरी की सिफारिश करूंगा।
SELECT s.*
FROM student AS s
JOIN (
SELECT e.sno
FROM enroll AS e
GROUP BY e.sno
HAVING COUNT(*) > 1
) AS e
ON e.sno = s.sno
ORDER BY s.age DESC
LIMIT 10
JOIN
. के बाद वहां सबक्वायरी क्या वह पहली गणना करता है (जिसमें छात्रों की ENROLL में कई पंक्तियाँ होती हैं) और मूल रूप से छात्र आईडी की सूची के साथ एक छद्म तालिका तैयार करता है। चूँकि हम इनर जॉइन कर रहे हैं, STUDENT टेबल में केवल वे पंक्तियाँ हैं जिनमें sno
है हमारे सबक्वायरी में दिखाई देगा। इसका मूल रूप से ON
द्वारा ख्याल रखा जाता है खंड।
चूंकि आपने एक टिप्पणी में कहा था कि आप छात्रों पर अतिरिक्त शर्तें लागू करने में सक्षम होना चाहते हैं, इसलिए मैंने कुछ उदाहरण कोड जोड़े हैं जहां ऐसा होगा। चूंकि वह जानकारी छात्र तालिका से आती है, इसे सबक्वायरी के बाहर किया जा सकता है। आपने विशेष रूप से "सबसे पुराने छात्रों" का मतलब नहीं बताया है, इसलिए मैंने अभी माना है कि आप 10 सबसे पुराने को कई पाठ्यक्रमों में नामांकित करना चाहते थे। आपको अपनी आवश्यकताओं के आधार पर समायोजित करने में सक्षम होना चाहिए।
अगर इनमें से कोई भी समझ में नहीं आता है तो मुझे बताएं और मैं और विस्तार से समझाने की कोशिश करूंगा।