tablefunc मॉड्यूल से उपयोग crosstab()
।
SELECT * FROM crosstab(
$$SELECT user_id, user_name, rn, email_address
FROM (
SELECT u.user_id, u.user_name, e.email_address
, row_number() OVER (PARTITION BY u.user_id
ORDER BY e.creation_date DESC NULLS LAST) AS rn
FROM usr u
LEFT JOIN email_tbl e USING (user_id)
) sub
WHERE rn < 4
ORDER BY user_id
$$
, 'VALUES (1),(2),(3)'
) AS t (user_id int, user_name text, email1 text, email2 text, email3 text);
मैंने पहले पैरामीटर के लिए डॉलर-उद्धरण का उपयोग किया, जिसका कोई विशेष अर्थ नहीं है। यह सिर्फ सुविधाजनक है आप क्वेरी स्ट्रिंग जो एक आम मामला है में एकल उद्धरण से बचने के लिए है, तो:
विस्तृत विवरण और निर्देश यहाँ:
और विशेष रूप से, "अतिरिक्त कॉलम" के लिए:
विशेष कठिनाइयों यहां हैं:
प्रमुख नामों की कमी है।
-> हम एक सबक्वायरी में row_number()
के साथ प्रतिस्थापित करते हैं।
ईमेल की अलग-अलग संख्या।
-> हम अधिकतम तक सीमित हैं। बाहरी SELECT
में से तीन और crosstab()
का उपयोग दो पैरामीटर के साथ करें, संभावित कुंजी की एक सूची प्रदान करते हैं।
NULLS LAST
in the ORDER BY
पर ध्यान दें।
स्रोत
2014-04-14 13:42:17
सही, thankyou। वास्तव में मुझे क्या चाहिए। यह सवाल मुझसे परे थोड़ा सा होता, लेकिन मुझे सीखने और समझने में मदद मिली है। – dacology
उन कुछ आश्चर्यजनक के लिए। नहीं, यह एडब्ल्यूएस रेडशिफ्ट पर काम नहीं करता है। –
@MarcelloGrechiLins: यह क्यू एंड ए पोस्टग्रेज़ के लिए हैं, रेडशिफ्ट नहीं। –