Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

Oracle:अभिव्यक्ति त्रुटि द्वारा समूह नहीं

कोशिश करें:

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 हैंडलिंग।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ओरेकल में साइन () फ़ंक्शन

  2. बल्क संग्रह का उपयोग करते हुए LIMIT के लिए मान सेट करना

  3. Oracle:समानांतर निष्पादन का उपयोग क्यों नहीं करता है?

  4. Oracle PL/SQL:DML पैकेज ऑनलाइन बनाएँ

  5. Oracle SQL:ROWNUM द्वारा फ़िल्टरिंग परिणाम नहीं लौटा रहा है जब इसे करना चाहिए