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

एसक्यूएल मिनट समारोह और अन्य कॉलम

आरंभ करने के लिए:नहीं,

SELECT user_id, MAX(salary) FROM users;

मानक के अनुरूप नहीं है। आप एक समग्र फ़ंक्शन का उपयोग कर रहे हैं (MAX ) बिना GROUP BY . के खंड। ऐसा करके आप डीबीएमएस को सभी रिकॉर्ड को एक एकल परिणाम पंक्ति में एकत्रित करने के लिए कहते हैं। अब आप इस परिणाम पंक्ति में DBMS को दिखाने के लिए क्या कहते हैं? तालिका में मिला अधिकतम वेतन (MAX(salary) ) और user_id . हालांकि, कोई . नहीं है user_id; संभवतः कई अलग-अलग user_id हैं मेज पर। यह SQL मानक का उल्लंघन करता है। MySQL गैर-समेकित user_id की व्याख्या करने की स्वतंत्रता लेता है जैसा कोई भी user_id (मनमाने ढंग से चुना गया)।

इसलिए भले ही क्वेरी चलती है, लेकिन आमतौर पर इसका परिणाम वांछित नहीं होता है।

यह प्रश्न:

SELECT user_id, name, MAX(salary) FROM users GROUP BY user_id;

दूसरी ओर मानक के अनुरूप है। आइए फिर से देखें कि यह क्वेरी क्या करती है:इस बार एक GROUP BY . है खंड DBMS को बता रहा है कि आप प्रति user_id के लिए एक परिणाम पंक्ति चाहते हैं . प्रत्येक user_id . के लिए आप दिखाना चाहते हैं: user_id , name , और अधिकतम salary . ये सभी मान्य भाव हैं; user_id user_id है स्वयं, नाम एक उपयोगकर्ता नाम है जो user_id . से जुड़ा है , और अधिकतम salary उपयोगकर्ता का अधिकतम वेतन है। असंगठित स्तंभ name इसकी अनुमति है, क्योंकि यह कार्यात्मक रूप से user_id . द्वारा समूहीकृत पर निर्भर है . हालांकि, कई DBMS इसका समर्थन नहीं करते हैं, क्योंकि यह निर्धारित करना बेहद जटिल हो सकता है कि कोई व्यंजक समूह पर कार्यात्मक रूप से निर्भर है या नहीं।

उपयोगकर्ता रिकॉर्ड को अधिकतम वेतन के साथ कैसे दिखाया जाए, इसके लिए आपको एक सीमित खंड की आवश्यकता है। MySQL LIMIT प्रदान करता है इसके लिए, जो आपको पहली n पंक्तियाँ प्राप्त कर सकता है। हालांकि यह संबंधों से संबंधित नहीं है।

SELECT * FROM users ORDER BY salary DESC LIMIT 1;

है

SELECT * FROM users ORDER BY salary FETCH FIRST ROW ONLY;

मानक एसक्यूएल में।

हालांकि, संबंधों से निपटने के लिए, जैसा कि

. में है
SELECT * FROM users ORDER BY salary FETCH FIRST ROW WITH TIES;

आपको MySQL में एक सबक्वेरी की आवश्यकता है, क्योंकि LIMIT इसका समर्थन नहीं करता:

SELECT * FROM users WHERE salary = (SELECT MAX(salary) FROM users);


  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. 'सक्रिय' झंडा या नहीं?

  3. DBX त्रुटि:ड्राइवर को ठीक से प्रारंभ नहीं किया जा सका

  4. MySQL/PHP में प्रदर्शित होने वाले रिकॉर्ड को दोहराने से बचें

  5. क्लस्टर्ड इंडेक्स टेबल क्या है?