ऐसा करने का पोस्टग्रेज़ तरीका:
SELECT *
FROM users u
LEFT JOIN (
SELECT user_id, count(*) AS friends
FROM friends
) f USING (user_id)
ORDER BY f.friends DESC NULLS LAST, user_id -- as tiebreaker
-
कीवर्ड
<ब्लॉककोट>ASटेबल उपनाम के लिए सिर्फ शोर है। लेकिन इसे कॉलम उपनामों से न छोड़ें। "ऑमिटिंग द एएस की वर्ड" पर मैनुअल:FROM. में आइटम, मानक और PostgreSQL दोनोंAS. की अनुमति देते हैं एक अनारक्षित कीवर्ड के उपनाम से पहले छोड़े जाने के लिए। लेकिन यह वाक्यात्मक अस्पष्टताओं के कारण आउटपुट कॉलम नामों के लिए अव्यावहारिक है ।बोल्ड जोर मेरा।
-
ISNULL()MySQL या SQL सर्वर का एक कस्टम एक्सटेंशन है। Postgres SQL-मानक फ़ंक्शन का उपयोग करता हैCOALESCE(). लेकिन आपको यहां भी जरूरत नहीं है।NULLS LASTका उपयोग करें इसके बजाय क्लॉज, जो तेज और क्लीनर है। देखें:- डेटाटाइम एएससी द्वारा पोस्टग्रेएसक्यूएल सॉर्ट करें, पहले शून्य?
-
एकाधिक उपयोगकर्ताओं के मित्रों की संख्या समान होगी। इन साथियों को मनमाने ढंग से क्रमबद्ध किया जाएगा। बार-बार निष्पादन से भिन्न प्रकार का क्रम प्राप्त हो सकता है, जो आमतौर पर वांछनीय नहीं है।
ORDER BY. में और भाव जोड़ें टाईब्रेकर के रूप में। अंततः, प्राथमिक कुंजी किसी भी शेष अस्पष्टता का समाधान करती है। -
यदि दो तालिकाओं का एक ही कॉलम नाम
user_idshare है (जैसे उन्हें चाहिए) आप सिंटैक्स शॉर्टकट का उपयोग कर सकते हैंUSINGज्वाइन क्लॉज में। एक और मानक SQL सुविधा। स्वागत दुष्प्रभाव:user_idSELECT *. के आउटपुट में केवल एक बार सूचीबद्ध होता है ,ON. के साथ शामिल होने के विरोध में . कई क्लाइंट आउटपुट में डुप्लीकेट कॉलम नाम भी स्वीकार नहीं करेंगे।