बस आपको यह बताना चाहता था कि विश्लेषणात्मक कार्यों की नकल करने के लिए आप MySQL में चर का उपयोग कर सकते हैं। उदाहरण के लिए, SUM OVER इस प्रकार किया जा सकता है:
SELECT amount,
@sum := @sum + amount as sum
FROM tbl
JOIN (SELECT @sum := 0) s
अगर आप PARTITION BY
करना चाहते हैं , यह संभव है लेकिन थोड़ा अधिक जटिल है। मूल रूप से, आप एक और @variable
जोड़ते हैं खाता देखने के लिए (या जो भी आप विभाजित करना चाहते हैं), खाते के अनुसार क्रम (या आपका चर), और फिर @sum
रीसेट करें जब खाता बदल जाता है। इस प्रकार:
SELECT account,
amount,
(case when @account != account then @sum := amount else @sum := @sum + amount end) as sum,
(case when @account != account then @account := account else @account end) as _
FROM (SELECT * FROM tbl ORDER BY account)
JOIN (SELECT @sum := 0) s
JOIN (SELECT @account := '') a
आप दो बड़े बदलावों पर ध्यान देंगे जो विभाजन प्रभाव को पूरा करने के लिए किए जाने थे:
-
मुख्य तालिका (
tbl
) एक उप चयन मेंORDER BY
. के साथ संलग्न है खंड। यह आवश्यक है क्योंकि जब MySQL@account
करने के लिए जाता है परिवर्तनीय परीक्षण मूल्यों को पहले से ही आदेश देने की आवश्यकता है। यदि ऐसा नहीं होता, तो आपको गलत योग मान और साथ ही खाता मान प्राप्त होंगे। -
एक 'अतिरिक्त' कॉलम है जिसका उपनाम
as _
. है . परिणामों का उपयोग करते समय आप इस कॉलम को अनदेखा कर सकते हैं, लेकिन@account
. का क्रम जाँच और परिवर्तन@sum
. के बाद होना चाहिए जाँच करें और बदलें।इसके साथ ही, आप अपने कॉलम को फिर से क्रमित करने का विकल्प चुन सकते हैं यदि आपको खाता अंतिम होने पर कोई आपत्ति नहीं है। यह पहला
account
. निकाल कर किया जाता है कॉलम क्योंकि यह अंतिम_
. के साथ डुप्लीकेट है कॉलम और फिर स्पष्ट रूप से उपनाम का नाम बदल दिया_
account
. के लिए .
संसाधन:
- http://dev.mysql.com/ doc/refman/5.0/hi/user-variables.html
- https://stackoverflow.com/a/2563940/263175