SELECT id_student, id_class, grade,
@student:=CASE WHEN @class <> id_class THEN 0 ELSE @student+1 END AS rn,
@class:=id_class AS clset
FROM
(SELECT @student:= -1) s,
(SELECT @class:= -1) c,
(SELECT *
FROM mytable
ORDER BY id_class, id_student
) t
यह बहुत ही सरल तरीके से काम करता है:
- प्रारंभिक क्वेरी
id_classद्वारा आदेशित की जाती है सबसे पहले,id_studentदूसरा। @studentऔर@class-1. में इनिशियलाइज़ किया गया है@classयह जांचने के लिए प्रयोग किया जाता है कि अगला सेट दर्ज किया गया है या नहीं। अगरid_class. का पिछला मान (जो@class. में स्टोर होता है ) वर्तमान मान के बराबर नहीं है (जोid_class. में संग्रहीत है ),@studentशून्य है। अन्यथा वृद्धि हुई है।@classid_class. के नए मान के साथ असाइन किया गया है , और इसका उपयोग अगली पंक्ति में चरण 3 पर परीक्षण में किया जाएगा।