MySQL में OFFSET और LIMIT का उपयोग करके वैकल्पिक पंक्तियाँ चुनना (हर 2 छोड़कर 1)
पंक्तियों को छोड़ने और विशिष्ट पैटर्न में चुनने के लिए OFFSET और LIMIT क्लॉज का संयोजन उपयोग करें।
उदाहरण के साथ पूर्ण कार्यान्वयन
टेबल बनाना
mysql> CREATE TABLE DemoTable617 (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
FirstName VARCHAR(100)
);
रिकॉर्ड डालना
mysql> INSERT INTO DemoTable617(FirstName) VALUES
('John'), ('Sam'), ('Carol'), ('Mike'), ('David'), ('Bob'), ('Robert'), ('Chris'), ('Mike'), ('Adam');
सभी रिकॉर्ड देखना
mysql> SELECT * FROM DemoTable617;
आउटपुट:
+----+-----------+
| Id | FirstName |
+----+-----------+
| 1 | John |
| 2 | Sam |
| 3 | Carol |
| 4 | Mike |
| 5 | David |
| 6 | Bob |
| 7 | Robert |
| 8 | Chris |
| 9 | Mike |
| 10 | Adam |
+----+-----------+
10 rows in set (0.00 sec)
पहले नाम के अनुसार अवरोही क्रम, 2 छोड़कर 5 चुनना
mysql> SELECT tbl.* FROM (
SELECT * FROM DemoTable617
ORDER BY FirstName DESC
LIMIT 5 OFFSET 2
) AS tbl
ORDER BY tbl.Id;
आउटपुट:
+----+-----------+
| Id | FirstName |
+----+-----------+
| 1 | John |
| 4 | Mike |
| 5 | David |
| 8 | Chris |
| 9 | Mike |
+----+-----------+
5 rows in set (0.00 sec)
चरण-दर-चरण:
- आंतरिक क्वेरी:
ORDER BY FirstName DESC→ Sam, Robert, Mike, Mike, John, David, Chris, Carol, Bob, Adam - OFFSET 2: पहले 2 छोड़ें (Sam, Robert)
- LIMIT 5: अगले 5 लें (Mike, Mike, John, David, Chris)
- बाहरी ORDER BY Id: मूल ID क्रम में (1, 4, 5, 8, 9)
हर Nवीं पंक्ति चुनने का पैटर्न (MOD का उपयोग करके)
-- हर 3रीं पंक्ति (3, 6, 9, ...)
SELECT * FROM DemoTable617 WHERE Id % 3 = 0;
-- हर 2रीं पंक्ति (सम ID)
SELECT * FROM DemoTable617 WHERE Id % 2 = 0;
-- विषम ID (1, 3, 5, ...)
SELECT * FROM DemoTable617 WHERE Id % 2 = 1;
ROW_NUMBER() के साथ (MySQL 8.0+)
SELECT * FROM (
SELECT *, ROW_NUMBER() OVER (ORDER BY Id) AS rn
FROM DemoTable617
) t
WHERE rn % 3 = 1; -- हर 3रीं पंक्ति (1, 4, 7, ...)
नमूना चयन (Bernoulli sampling)
-- लगभग 30% यादृच्छिक नमूना
SELECT * FROM DemoTable617 WHERE RAND() < 0.3;
नोट: मूल क्वेरी "हर 2 छोड़कर 1" पैटर्न के बजाय एक बार OFFSET/LIMIT करती है। वास्तविक "हर 2 छोड़कर 1" के लिए MOD/ROW_NUMBER दृष्टिकोण बेहतर है।