मैं एक क्वेरी को एक साथ रखने की कोशिश कर रहा हूं जो एक समय के दौरान एक संचयी परिणाम के रूप में उपयोगकर्ता (लाभ/हानि) के आंकड़े पुनर्प्राप्त करेगा।अपवाद द्वारा पोस्टग्रेस विंडो फ़ंक्शन और समूह
SELECT p.name, e.date,
sum(sp.payout) OVER (ORDER BY e.date)
- sum(s.buyin) OVER (ORDER BY e.date) AS "Profit/Loss"
FROM result r
JOIN game g ON r.game_id = g.game_id
JOIN event e ON g.event_id = e.event_id
JOIN structure s ON g.structure_id = s.structure_id
JOIN structure_payout sp ON g.structure_id = sp.structure_id
AND r.position = sp.position
JOIN player p ON r.player_id = p.player_id
WHERE p.player_id = 17
GROUP BY p.name, e.date, e.event_id, sp.payout, s.buyin
ORDER BY p.name, e.date ASC
क्वेरी चलेंगे:
क्वेरी मैं अब तक राशि है। हालांकि, परिणाम थोड़ा गलत है। कारण यह है कि event
में कई गेम हो सकते हैं (विभिन्न sp.payouts
के साथ)। इसलिए, उपर्युक्त कई पंक्तियों के साथ आता है यदि उपयोगकर्ता के पास अलग-अलग पेआउट वाले ईवेंट में 2 परिणाम होते हैं (यानी प्रति ईवेंट 4 गेम होते हैं, और उपयोगकर्ता को एक से £ 20 और दूसरे से £ 40 मिलते हैं)।
स्पष्ट समाधान में संशोधन करने का GROUP BY
होगा:
GROUP BY p.name, e.date, e.event_id
हालांकि, Postgres इस पर शिकायत रूप में पहचान किया जाना चाहिए कि sp.payout
और s.buyin
एक समग्र समारोह के अंदर हैं प्रकट नहीं होता है। मुझे त्रुटि मिलती है:
column "sp.payout" must appear in the GROUP BY clause or be used in an aggregate function
मैं उबंटू लिनक्स सर्वर पर 9.1 चला रहा हूं।
क्या मुझे कुछ याद आ रहा है, या क्या यह पोस्टग्रेस में वास्तविक दोष हो सकता है?
पहली क्वेरी काम कर रही है, हालांकि, क्वेरी का आउटपुट आवश्यक परिणाम नहीं दे रहा है। मैं देख सकता हूं कि सिद्धांत में सिद्धांत क्या काम करेगा, लेकिन पोस्टग्रेस इसे पसंद नहीं करते हैं। मैं बाद में कोशिश करूँगा और आपको बता दूंगा। हालांकि, ऐसा लगता है कि "event_id" में एक से अधिक "पेआउट" राशि होने पर आपकी क्वेरी के आउटपुट में 2 पंक्तियां होंगी। – Martin
मैंने अभी आपके द्वारा सुझाए गए संशोधनों के साथ प्रयास किया है, और यह कई पंक्तियों के साथ वापस आ गया है जहां एकल event_id के लिए एकाधिक sp.payout मान हैं। – Martin
@ मार्टिन: मेरा संशोधित उत्तर देखें। –