कोशिश करें:
SELECT c.courseid,
c.coursename,
AVG(a.mark) AS Average_Mark
FROM COURSE c
INNER JOIN ASSESSMENT a
ON c.courseid = a.courseid
GROUP BY c.courseid,
c.coursename
ORDER BY 3 DESC; -- or ORDER BY Average_Mark DESC
जैसे ही आप Mark
. के कई मान एकत्रित करते हैं औसत की गणना करने के लिए, Mark
. के प्रत्येक मान को क्रमबद्ध करना असंभव हो जाता है . आपको गणना के परिणाम को क्रमबद्ध करना होगा, अर्थात Average_Mark
।
अधिक सामान्य दृष्टिकोण से, आपको ORDER BY
. की अनुमति है एक गैर SELECT
एड कॉलम केवल तभी जब यह कॉलम क्वेरी टेबल का हिस्सा है और यदि आप किसी GROUP BY
का उपयोग नहीं करते हैं या DISTINCT
(जब तक आप GROUP BY
यह गैर प्रदर्शित कॉलम है, तो आप ORDER BY
. कर सकते हैं यह)।
कारण सरल है:यदि आप GROUP BY
. का उपयोग करते हैं या DISTINCT
, कई पंक्तियों को संभावित रूप से एक के रूप में प्रदर्शित किया जाएगा। उन "मर्ज किए गए" पंक्तियों में प्रदर्शित न किए गए मान संभावित रूप से एक दूसरे से भिन्न हो सकते हैं, जिससे कोई भी ORDER BY
हो सकता है उन मूल्यों पर असंभव।
कुछ DBMS (MySQL कम से कम) अलग तरह से व्यवहार करते हैं, जिससे ORDER
की अनुमति मिलती है आईएनजी BY
गैर प्रदर्शित मान, यहां तक कि GROUP BY
. के साथ भी . लेकिन MySQL तब गैर-प्रदर्शित मान के पहले सामना किए गए मान के क्रम में लगता है (देखें fiddle ) इसलिए, बेहतर होगा कि यह ध्यान रखें कि अप्रत्याशित परिणामों को रोकने के लिए इससे बचा जाना चाहिए।
संपादित करें: दस्तावेज
देखें MySQL के बारे में GROUP BY
हैंडलिंग।