SELECT MAX(...) সাবকোয়েরি দিয়ে সব রোয়ে একই সর্বোচ্চ মান দেখানো
MySQL-এ একটি কলামের সর্বোচ্চ মান বের করে সেই মানটি একই টেবিলের সব রোয়ে একটি নতুন কলাম হিসেবে দেখাতে SELECT ..., (SELECT MAX(col) FROM table) AS max_col FROM table প্যাটার্ন ব্যবহার করা হয়।
টেবিল ও ডেটা
mysql> CREATE TABLE DemoTable (FirstName VARCHAR(100), Score INT);
mysql> INSERT INTO DemoTable VALUES('David',59), ('Chris',97), ('Bob',98), ('Carol',91);
সব রেকর্ড
+-----------+-------+ | FirstName | Score | +-----------+-------+ | David | 59 | | Chris | 97 | | Bob | 98 | | Carol | 91 | +-----------+-------+
সাবকোয়েরি দিয়ে MAX(Score) সব রোতে দেখানো
mysql> SELECT FirstName, (SELECT MAX(Score) FROM DemoTable) AS Score FROM DemoTable;
+-----------+-------+ | FirstName | Score | +-----------+-------+ | David | 98 | | Chris | 98 | | Bob | 98 | | Carol | 98 | +-----------+-------+
ব্যাখ্যা
(SELECT MAX(Score) FROM DemoTable)— স্কেলার সাবকোয়েরি, একক মান (৯৮) রিটার্ন করে।- প্রতিটি আউটপুট রোতে এই মানটি
Scoreএলিয়াসে দেখায়। - মূল
Scoreকলামটি আপডেট হয়নি, শুধু SELECT-এ দেখায়।
আপডেট করতে চাইলে (সাবকোয়েরি + UPDATE)
UPDATE DemoTable SET Score = (SELECT MAX(Score) FROM DemoTable);
এটি সব রোয়ের Score কে ৯৮ করবে।
পারফরম্যান্স নোট
- সাবকোয়েরি প্রতি রো এক্সিকিউট হতে পারে (অপ্টিমাইজার ডিপেন্ডেন্ট)।
- বेहতর:
SELECT FirstName, (SELECT MAX(Score) FROM DemoTable) AS MaxScore FROM DemoTable;— একবার ক্যালকুলেট হয় (MySQL অপ্টিমাইজার সাধারণত ক্যাশ করে)। - ভেরিয়েবল ব্যবহার করুন:
SET @max = (SELECT MAX(Score) FROM DemoTable); SELECT FirstName, @max AS MaxScore FROM DemoTable;