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

प्रत्येक समूह/विभाजन के लिए MySQL सघन रैंक

आप एक (अस्थायी) MyISAM . बना सकते हैं AUTO_INCREMENT rank के साथ तालिका समग्र प्राथमिक कुंजी में स्तंभ। इस तरह rank प्रति ID . में एक क्रम होगा जब आप तालिका को अलग (id, item_code) . से भरते हैं संयोजन। फिर आप मूल डेटा के साथ उस तालिका में शामिल हो सकते हैं।

CREATE TEMPORARY TABLE tmp_rank(
  id INT,
  item_code varchar(50),
  rank INT AUTO_INCREMENT,
  PRIMARY KEY (id, rank)
) engine=MyISAM
  SELECT DISTINCT NULL as rank, id, item_code
  FROM test t
  -- WHERE <several filters>
  ORDER BY id, item_code
;

SELECT t.*, x.rank
FROM tmp_rank x
JOIN test t USING(id, item_code)
-- WHERE <several filters>

डेमो

यदि आप इसे एक ही प्रश्न में चाहते हैं, तो आप इसे आजमा सकते हैं:

SELECT id, item_code,
    CASE 
      WHEN id = @curId AND item_code = @curCode
        THEN @curRank
      WHEN id <> @curId THEN @curRank := 1
      ELSE @curRank := @curRank + 1
    END  AS rank,
    @curId := id,
    @curCode := item_code
FROM test t
CROSS JOIN (SELECT
    @curRank := 0,
    cast(@curCode := null as signed),
    cast(@curId   := NULL as char)
) r
#WHERE <several filters>
ORDER BY id, item_code

डेमो

सावधान रहें, कि SQL कथन में संचालन का मूल्यांकन क्रम परिभाषित नहीं है। इसलिए जब आप एक ही स्टेटमेंट में यूजर वेरिएबल को पढ़ते और लिखते हैं, तो आप कार्यान्वयन विवरण पर निर्भर होते हैं।

MySQL 8 . में या MariaDB 10.2 यह होगा:

SELECT  id, item_code,
    DENSE_RANK() OVER (PARTITION BY id ORDER BY item_code) as `rank`
FROM test t
-- WHERE <several filters>

डेमो



  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 में FULLTEXT खोज किसी भी पंक्ति को वापस नहीं करती है

  2. JDBC कनेक्शन टाइमआउट फिर से कनेक्ट नहीं हो सकता

  3. मैं Laravel 5 में कच्चे पीडीओ इंस्टेंस तक नहीं पहुंच सकता

  4. संबंधपरक डीबी में वृक्ष संरचना को स्टोर करने के ज्ञात तरीके क्या हैं?

  5. विभिन्न डेटा स्रोतों को पढ़ने/लिखने के लिए हाइबरनेट कैसे सेट करें?