একাধিক কলামে GROUP BY এবং MAX() একসাথে ব্যবহার করতে সাবকোয়েরি বা উইন্ডো ফাংশন (MySQL 8.0+) ব্যবহার করুন।
টেবিল ও ডেটা
CREATE TABLE GroupByMaxDemo (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
CategoryId INT,
Value1 INT,
Value2 INT
);
INSERT INTO GroupByMaxDemo (CategoryId, Value1, Value2) VALUES
(10, 100, 50),
(10, 100, 70),
(10, 50, 100),
(20, 180, 150);
পদ্ধতি ১: সাবকোয়েরি (সব ভার্সন)
SELECT t2.CategoryId, t2.Value1, MAX(t2.Value2) AS MaxValue2
FROM (
SELECT CategoryId, MAX(Value1) AS Value1
FROM GroupByMaxDemo
GROUP BY CategoryId
) t1
INNER JOIN GroupByMaxDemo t2
ON t2.CategoryId = t1.CategoryId AND t2.Value1 = t1.Value1
GROUP BY t2.CategoryId, t2.Value1;
ফলাফল
+------------+--------+-------------+ | CategoryId | Value1 | MaxValue2 | +------------+--------+-------------+ | 10 | 100 | 70 | | 20 | 180 | 150 | +------------+--------+-------------+
পদ্ধতি ২: ROW_NUMBER() উইন্ডো ফাংশন (MySQL 8.0+)
WITH Ranked AS (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY CategoryId ORDER BY Value1 DESC, Value2 DESC) AS rn
FROM GroupByMaxDemo
)
SELECT CategoryId, Value1, Value2
FROM Ranked
WHERE rn = 1;
ফলাফল একই হবে। উইন্ডো ফাংশন পদ্ধতিটি আরও পঠনীয় এবং পারফরম্যান্সে ভালো।