MySQL में उपयोगकर्ता-परिभाषित वेरिएबल का उपयोग करके ROW_NUMBER() अनुकरण करना
MySQL 8.0 से पहले ROW_NUMBER() विंडो फ़ंक्शन नहीं था। आप सत्र वेरिएबल का उपयोग करके पंक्ति संख्या जनरेट कर सकते हैं।
सिंटैक्स (MySQL 8.0 से पहले)
SELECT (@row_number := @row_number + 1) AS ROW_NUMBER, yourColumnName1, yourColumnName2 FROM yourTableName, (SELECT @row_number := 0) AS t;
उदाहरण
टेबल बनाएं:
mysql> create table RowNumberDemo (
-> UserId int,
-> UserName varchar(20)
-> );
डेटा डालें:
mysql> insert into RowNumberDemo values(10, 'John'); mysql> insert into RowNumberDemo values(50, 'Carol'); mysql> insert into RowNumberDemo values(100, 'Sam'); mysql> insert into RowNumberDemo values(150, 'Mike'); mysql> insert into RowNumberDemo values(210, 'Bob');
पंक्ति संख्या जनरेट करें:
mysql> SELECT (@ROW_NUMBER := @ROW_NUMBER + 1) AS `ROW_NUMBER`, UserId, UserName
-> FROM RowNumberDemo, (SELECT @ROW_NUMBER := 0) AS t;
परिणाम:
+------------+--------+----------+ | ROW_NUMBER | UserId | UserName | +------------+--------+----------+ | 1 | 10 | John | | 2 | 50 | Carol | | 3 | 100 | Sam | | 4 | 150 | Mike | | 5 | 210 | Bob | +------------+--------+----------+
MySQL 8.0+ में विंडो फ़ंक्शन
SELECT ROW_NUMBER() OVER (ORDER BY UserId) AS ROW_NUMBER, UserId, UserName FROM RowNumberDemo;
PARTITION BY के साथ
SELECT ROW_NUMBER() OVER (PARTITION BY Department ORDER BY Salary DESC) AS ROW_NUMBER, ... FROM Employees;
महत्वपूर्ण नोट्स
- पुराना वेरिएबल तरीका क्रम की गारंटी नहीं देता (ORDER BY जोड़ें)
- विंडो फ़ंक्शन (MySQL 8.0+) मानक, तेज़ और अधिक शक्तिशाली हैं
RANK(),DENSE_RANK()भी उपलब्ध हैं