मैं MySQL में एक तालिका बना रहा हूं और एक "समूहीकृत अनुक्रमणिका" पंक्ति बनाने की आवश्यकता है जो वृद्धि करती है, लेकिन किसी अन्य कॉलम में नए मानों के लिए रीसेट करती है। इस कदर:

1 Apple
2 Apple
3 Apple
1 Banana
2 Banana
1 Pear
2 Pear
3 Pear
4 Pear

कोई विचार मैं यह कैसे कर सकता हूं?

0
Zak 22 फरवरी 2020, 02:38
और क्या होता है यदि "Apple" के दो समूह हों।
 – 
Gordon Linoff
22 फरवरी 2020, 06:34

2 जवाब

यदि आप MySQL 8.0 चला रहे हैं, तो बस row_number() का उपयोग करें:

select
    row_number() over(partition by fruit order by ?) rn,
    fruit
from mytable

ध्यान दें, आपके उत्तर के लिए सुसंगत परिणाम देने के लिए, आपको एक अन्य कॉलम की आवश्यकता है जिसका उपयोग रिकॉर्ड को आदेश करने के लिए किया जा सकता है। मैंने इसे क्वेरी में ? के रूप में दर्शाया है।

1
GMB 22 फरवरी 2020, 02:39

यदि आप mysql 5.x का उपयोग करते हैं तो आप इस क्वेरी का उपयोग कर सकते हैं

CREATE TABLE fruit (

  `fruit` VARCHAR(6)
);

INSERT INTO fruit
  ( `fruit`)
VALUES
  ( 'Apple'),
  ( 'Apple'),
  ( 'Apple'),
  ( 'Banana'),
  ( 'Banana'),
  ( 'Pear'),
  ( 'Pear'),
  ( 'Pear'),
  ( 'Pear');
✓

✓
SELECT
IF(fruit = @fruit, @row_number := @row_number +1,@row_number := 1) rownumber
,@fruit := fruit
FROM
  (SELECT * From fruit ORDER BY fruit ASC) t, (SELECT @row_number := 0) a,(SELECT @fruit := '') b ;
rownumber | @fruit := fruit
--------: | :--------------
        1 | Apple          
        2 | Apple          
        3 | Apple          
        1 | Banana         
        2 | Banana         
        1 | Pear           
        2 | Pear           
        3 | Pear           
        4 | Pear           

db<>fiddle यहां

कॉलम का आदेश इस प्रकार होना चाहिए, ताकि एल्गोरिदम काम कर सके। यदि आपको इसे बदलने के लिए MySQL में इसकी आवश्यकता है, तो कृपया बाहरी चयन का उपयोग करें

1
nbk 22 फरवरी 2020, 02:57