ऐसा करने का पोस्टग्रेज़ तरीका:
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_id
share है (जैसे उन्हें चाहिए) आप सिंटैक्स शॉर्टकट का उपयोग कर सकते हैंUSING
ज्वाइन क्लॉज में। एक और मानक SQL सुविधा। स्वागत दुष्प्रभाव:user_id
SELECT *
. के आउटपुट में केवल एक बार सूचीबद्ध होता है ,ON
. के साथ शामिल होने के विरोध में . कई क्लाइंट आउटपुट में डुप्लीकेट कॉलम नाम भी स्वीकार नहीं करेंगे।