গ্রুপ অনুযায়ী প্রথম এবং শেষ সারি বাদ দিয়ে মধ্যবর্তী সারি বের করতে সাবকোয়েরি দিয়ে MIN() এবং MAX() ব্যবহার করা হয়।
টেবিল ও ডেটা তৈরি
mysql> CREATE TABLE DemoTable1917 (
StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
StudentCode INT,
StudentMarks INT
);
mysql> INSERT INTO DemoTable1917 (StudentCode, StudentMarks) VALUES
(78, 95), (78, 96), (78, 97), (78, 98), (78, 99);
ডেটা যাচাই
mysql> SELECT * FROM DemoTable1917;
+-----------+-------------+--------------+ | StudentId | StudentCode | StudentMarks | +-----------+-------------+--------------+ | 1 | 78 | 95 | | 2 | 78 | 96 | | 3 | 78 | 97 | | 4 | 78 | 98 | | 5 | 78 | 99 | +-----------+-------------+--------------+
কোয়েরি: প্রথম ও শেষ StudentId বাদ দেওয়া
mysql> SELECT * FROM DemoTable1917
WHERE StudentId NOT IN (
(SELECT MIN(StudentId) FROM DemoTable1917 WHERE StudentCode = 78),
(SELECT MAX(StudentId) FROM DemoTable1917 WHERE StudentCode = 78)
)
AND StudentCode = 78;
আউটপুট:
+-----------+-------------+--------------+ | StudentId | StudentCode | StudentMarks | +-----------+-------------+--------------+ | 2 | 78 | 96 | | 3 | 78 | 97 | | 4 | 78 | 98 | +-----------+-------------+--------------+
আধুনিক বিকল্প (MySQL 8.0+): ROW_NUMBER()
WITH ranked AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY StudentCode ORDER BY StudentId) AS rn,
COUNT(*) OVER (PARTITION BY StudentCode) AS cnt
FROM DemoTable1917
WHERE StudentCode = 78
)
SELECT * FROM ranked WHERE rn NOT IN (1, cnt);
তুলনা
| পদ্ধতি | MySQL সংস্করণ | পারফরম্যান্স |
|---|---|---|
| MIN/MAX সাবকোয়েরি | সব | মাঝারি |
| ROW_NUMBER() (Window Function) | 8.0+ | উত্তম |