python - In mysql, is it possible to add a column based on values in one column? -
मेरे पास एक mysql तालिका डेटा है जिसके पास कॉलम हैं
+ ----- - + ----------- + ---------- + | एक | बी | सी | + ------- + ----------- + ---------- + | जॉन | 225630096 | 447 | | जॉन | 225630118 | 491 | | जॉन | 225630206 | 667 | | जॉन | 225630480 | 1215 | | जॉन | 225630677 | 160 9 | | जॉन | 225631010 | 2275 | | रयान | 154247076 | 6235 | | रयान | 154247079 | 6241 | | रयान | 154247083 | 624 9 | | रयान | 154247084 | 6251 | + ------- + ----------- + ---------- +
मैं एक कॉलम जोड़ना चाहता हूं < कोड> डी a
और c
में मानों के आधार पर (नीचे अपेक्षित तालिका देखें)। a
में मान, विषय का नाम है, b
इसकी विशेषता में से एक है, और c
दूसरे इसलिए, अगर प्रत्येक विषय के लिए c
के मूल्य एक-दूसरे के 15 इकाइयों के भीतर हैं, तो उन्हें एक ही क्लस्टर संख्या प्रदान करें (उदाहरण के लिए, c
के लिए ryan के लिए प्रत्येक मान
15 यूनिट के भीतर है, इसलिए वे सभी को 1) सौंपा गया है, लेकिन यदि उन्हें John
के लिए अलग मान नहीं लगाया जाता है, जहां प्रत्येक पंक्ति को d < / code>।
+ ------- + ----------- + ---------- + --- + | एक | बी | सी | डी | + ------- + ----------- + ---------- + --- + | जॉन | 225630096 | 447 | 1 | | जॉन | 225630118 | 491 | 2 | | जॉन | 225630206 | 667 | 3 | | जॉन | 225630480 | 1215 | 4 | | जॉन | 225630677 | 160 9 | 5 | | जॉन | 225631010 | 2275 | 6 | | रयान | 154247076 | 6235 | 1 | | रयान | 154247079 | 6241 | 1 | | रयान | 154247083 | 624 9 | 1 | | रयान | 154247084 | 6251 | 1 | + ------- + ----------- + ---------- + --- +
मैं नहीं हूं सुनिश्चित करें कि यह mysql में किया जा सकता है, लेकिन अगर मैं किसी भी अजगर आधारित उत्तरों का स्वागत करता हूं, तो उस मामले में, इस तालिका पर सीडीवी प्रारूप के रूप में काम करना।
धन्यवाद।
आप चर के साथ एक क्वेरी का उपयोग कर सकते हैं:
SELECT a, b, c, case WHEN @ Last_a! = एक THEN @ डी: = 1 WHEN (@last_a = a) AND (c & gt; @ last_c + 15) THEN @ डी: = @ डी + 1 ELSE @ डी ईडी डी, @लास्ट_ए: = ए, @last_c: = C FROM tablename, (SELECT @d: = 1, @last_a: = null, @last_c: = null) _n आदेश द्वारा, c
कृपया बेला देखें।
स्पष्टीकरण
मैं tablename
और subquery (SELECT ...) _n
में शामिल होने का उपयोग कर रहा हूं बस कुछ चर को प्रारंभ करने के लिए (d को 1 से प्रारंभ किया जाता है, @लास्ट_ए टू नल, @last_c को रिक्त करने के लिए)।
फिर, हर पंक्ति के लिए, मैं देख रहा हूँ कि आखिरी बार क्या हुआ - पिछली पंक्ति- अलग है वर्तमान से एक: उस मामले में सेट @ (1 और इसे लौटाना) सेट करें।
यदि पिछले एक का सामना करना पड़ा है, तो वर्तमान पंक्ति के समान है और c अंतिम आना सी + 15 से अधिक है, फिर वेतन वृद्धि @ डी और उसका मान वापस लौटाएं।
अन्यथा, बस इसे बढ़ाने के बिना डी वापस आओ। ऐसा तब होगा जब कोई परिवर्तन नहीं होता है और सी पिछले सी + 15 से अधिक नहीं है, या यह पहली पंक्ति पर होगा (क्योंकि @last_a और @last_c को रिक्त करने के लिए आरंभ किया गया है)।
To इसे काम करते हैं, हमें ए और सी के आदेश की आवश्यकता है।
Comments
Post a Comment