Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

उप-समूहों में एक sql क्वेरी में एक जेनरेटेड इंक्रीमेंट कॉलम कैसे जोड़ा जा सकता है?

मैंने इसे हल कर लिया है, यहां एक बेहतरीन ब्लॉग पोस्ट से मदद के लिए धन्यवाद:http://www.xaprb.com/blog/2006/12/15/advanced-mysql-user-variable-techniques/

समाधान गैर-तुच्छ है, जिसमें चर और कुछ उन्नत ज्ञान की आवश्यकता होती है कि कैसे MySQL अपने क्वेरी संचालन का आदेश देता है, लेकिन यह काफी प्रदर्शन करने वाला प्रतीत होता है। चाबियों में से एक यह है कि परिवर्तनीय असाइनमेंट फ़ंक्शन कॉल के भीतर छुपाए जा सकते हैं!

अनिवार्य रूप से, निम्न क्वेरी समस्या का समाधान करती है:

SET @num := 0, @type := '';

SELECT name, subgroup, @num AS increment
FROM table_name
WHERE 0 <= GREATEST(
   @num := IF(@type = subgroup, @num + 1, 1),
   LEAST(0, LENGTH(@type := subgroup)))

फंक्शन GREATEST , LEAST , और LENGTH वेरिएबल असाइनमेंट के लिए कंटेनर के रूप में ही हैं। जैसा कि आप देख सकते हैं, वे फ़ंक्शन अनिवार्य रूप से क्वेरी के आउटपुट को प्रभावित करने के लिए कुछ नहीं कर रहे हैं।

हालाँकि, मैंने यह भी पाया कि मेरी तालिका में "उपसमूह" मान थे जो लगातार नहीं थे। उदाहरण के लिए:

+------+----------+
| name | subgroup |
+------+----------+
| john | 1        |
| doe  | 1        |
| jim  | 1        |
| greg | 2        |
| boe  | 2        |
| amos | 3        |
| ben  | 1        |
| gary | 2        |
+------+----------+

इस प्रकार एक आउटपुट तालिका में परिणाम:

+------+----------+-----------+
| name | subgroup | increment |
+------+----------+-----------+
| john | 1        |         1 |
| doe  | 1        |         2 |
| jim  | 1        |         3 |
| greg | 2        |         1 |
| boe  | 2        |         2 |
| amos | 3        |         1 |
| ben  | 1        |         1 |
| gary | 2        |         1 |
+------+----------+-----------+

ORDER BY को टटोलना क्वेरी के अंत में क्लॉज निष्पादन आदेश के कारण काम नहीं करता था, और वेरिएबल असाइनमेंट को ORDER BY में छुपाता था क्लॉज करीब आया लेकिन इसके अपने मुद्दे थे, इसलिए यहां अंतिम क्वेरी है जिसका मैंने उपयोग किया:

SET @num := 0, @type := '';

SELECT name, subgroup, @num AS increment
FROM (SELECT * FROM table_name ORDER BY subgroup) AS table_name2
WHERE 0 <= GREATEST(
   @num := IF(@type = subgroup, @num + 1, 1),
   LEAST(0, LENGTH(@type := subgroup)))

निम्नलिखित आउटपुट में परिणाम:

+------+----------+-----------+
| name | subgroup | increment |
+------+----------+-----------+
| john | 1        |         1 |
| doe  | 1        |         2 |
| jim  | 1        |         3 |
| ben  | 1        |         4 |
| greg | 2        |         1 |
| boe  | 2        |         2 |
| gary | 2        |         3 |
| amos | 3        |         1 |
+------+----------+-----------+

जय!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL पीडीओ क्वेरी से तेज तैयार? यह सरल परीक्षण यही दिखाता है

  2. लगातार मूल्यों द्वारा MySQL समूह

  3. पायथन MySQL गलत वास्तुकला त्रुटि

  4. MySQL, जांचें कि SQL के साथ तालिका में कोई कॉलम मौजूद है या नहीं

  5. mysql क्वेरी का उपयोग करके सभी नाम खोजें जो 'a' अक्षर से शुरू होता है