"

چگونگی ماکزیمم مقدار از چندین ستون در جدول SQL Server بیابیم؟, استفاده از CASE  در SQL,ستفاده از VALUES و MAX در SQL

چگونگی ماکزیمم مقدار از چندین ستون در جدول SQL Server بیابیم؟

در SQL Server می‌توان با روشی مانند MAX، CASE، CROSS APPLY و GREATEST بیشترین مقدار را از میان چندین ستون یک جدول استخراج کرد

تیم تحریریه
8
0
13 تیر 1405
لینک کوتاه

چگونگی ماکزیمم مقدار از چندین ستون در جدول SQL Server بیابیم؟

در بسیاری از پروژه‌های پایگاه داده، اطلاعات مرتبط در چندین ستون مختلف ذخیره می‌شوند و گاهی لازم است بزرگ‌ترین مقدار (Maximum Value) را از میان این ستون‌ها استخراج کنیم.
به عنوان مثال ممکن است یک جدول فروش شامل مقادیر فروش در فصل‌های مختلف سال باشد یا جدولی داشته باشیم که نمرات چند آزمون یک دانشجو را در ستون‌های جداگانه ذخیره کرده باشد.
در چنین شرایطی نیاز داریم بیشترین مقدار موجود بین چند ستون را به دست آوریم.

در SQL Server روش‌های مختلفی برای پیدا کردن ماکزیمم مقدار از چندین ستون وجود دارد.
انتخاب روش مناسب به نسخه SQL Server، حجم داده‌ها و نوع خروجی مورد نیاز بستگی دارد.

 

آشنایی با تابع MAX  در  SQL Server

تابع ()MAX یکی از توابع تجمعی (Aggregate Functions) در SQL Server است.

 

مثال:

 

SELECT MAX(Salary)

FROM Employees

 

این دستور بزرگ‌ترین مقدار موجود در ستون Salary را برمی‌گرداند.

اما نکته مهم این است که تابع MAX به صورت مستقیم برای مقایسه چند ستون در یک رکورد طراحی نشده است.

فرض کنید جدول زیر را داریم:

EmployeeID Salary1 Salary2 Salary3
1 5000 7000 6000
2 8000 4000 9000
3 3000 4500 3500

 

اگر بخواهیم بیشترین مقدار هر ردیف را پیدا کنیم، نمی‌توانیم به سادگی از MAX استفاده کنیم.


 


🌟 آیا می‌خواهید به یک متخصص پایگاه داده تبدیل شوید و در دنیای فناوری اطلاعات بدرخشید؟

با دوره آموزشی SQL Server ما، شما می‌توانید به راحتی و با روشی عملی، تمام مهارت‌های لازم را یاد بگیرید!

این دوره به شما آموزش می‌دهد که چگونه داده‌ها را به بهترین شکل مدیریت کنید، گزارش‌های قدرتمند بسازید و به تحلیل‌های عمیق دست یابید.

با محتوای جذاب و پروژه‌های واقعی، شما نه تنها تئوری را یاد می‌گیرید، بلکه توانایی‌های عملی خود را نیز تقویت می‌کنید.

پس فرصت را از دست ندهید! همین امروز به جمع یادگیرندگان ما بپیوندید و اولین قدم را به سوی آینده شغلی روشن‌تر بردارید!

 همین حالا شروع کنید و به دنیای داده‌ها بپیوندید!





روش اول: استفاده از CASE  در SQL

یکی از روش‌های قدیمی و متداول استفاده از CASE است.

 

SELECT

EmployeeID,

CASE

WHEN Salary1 >= Salary2

AND Salary1 >= Salary3

THEN Salary1




WHEN Salary2 >= Salary1

AND Salary2 >= Salary3

THEN Salary2




ELSE Salary3

END AS MaxSalary

FROM Employees

 

خروجی:

EmployeeID  MaxSalary
1 7000
2 9000
3 4500

 

 

مزایای روش CASE   در SQL

  • سازگار با تمامی نسخه‌های SQL Server

  • بدون نیاز به توابع اضافی

  • عملکرد مناسب در جداول کوچک

معایب روش CASE

  • با افزایش تعداد ستون‌ها پیچیده می‌شود.

  • نگهداری کد دشوارتر خواهد شد.



مزایای روش CASE 

روش دوم: استفاده از VALUES و MAX در SQL

یکی از بهترین روش‌ها در SQL Server استفاده از VALUES به همراه MAX است.

فرض کنید جدول زیر را داریم:

 

CREATE TABLE EmployeeSales

(

EmployeeID INT,

SaleJan INT,

SaleFeb INT,

SaleMar INT

)

 

نمونه داده:

 

INSERT INTO EmployeeSales

VALUES

(1,1000,1500,1200),

(2,2500,1800,2700),

(3,900,1100,800)

 

حال می‌خواهیم بیشترین فروش هر کارمند را پیدا کنیم.

SELECT

EmployeeID,

(

SELECT MAX(Value)

FROM

(

VALUES

(SaleJan),

(SaleFeb),

(SaleMar)

) AS Sales(Value)

) AS MaxSale

FROM EmployeeSales

 

خروجی:

EmployeeID  MaxSale
1  1500
2 2700
3 1100

 

نحوه عملکرد

در این روش:

 

VALUES

(SaleJan),

(SaleFeb),

(SaleMar)

 

سه ستون را به صورت موقت به سه سطر تبدیل می‌کنیم.

سپس تابع MAX روی آن‌ها اجرا می‌شود.

مزایای  استفاده از VALUES و MAX

  • خوانایی بالا

  • توسعه آسان

  • مناسب برای تعداد ستون‌های زیاد

  • عملکرد بسیار خوب



مزایای  استفاده از VALUES و MAX


روش سوم: استفاده از CROSS APPLY در SQL

یکی از حرفه‌ای‌ترین روش‌ها استفاده از CROSS APPLY است.

 

SELECT

E.EmployeeID,

M.MaxSale

FROM EmployeeSales E




CROSS APPLY

(

SELECT MAX(V)

AS MaxSale




FROM

(

VALUES

(SaleJan),

(SaleFeb),

(SaleMar)

) X(V)

) M

 

خروجی:

EmployeeID  MaxSale
1 1500
2 2700
3 1100

 

مزیت CROSS APPLY

زمانی که بخواهیم چندین محاسبه را روی ستون‌ها انجام دهیم بسیار کاربردی است.

 

مثلاً:

 

SELECT

EmployeeID,

M.MaxSale,

M.MinSale

FROM EmployeeSales




CROSS APPLY

(

SELECT

MAX(V) AS MaxSale,

MIN(V) AS MinSale




FROM

(

VALUES

(SaleJan),

(SaleFeb),

(SaleMar)

) X(V)

) M



روش چهارم: استفاده از UNPIVOT در SQL

فرض کنید تعداد ستون‌ها زیاد باشد.

SELECT *

FROM EmployeeSales

UNPIVOT

(

SaleAmount

FOR MonthName

IN

(

SaleJan,

SaleFeb,

SaleMar

)

) U

 

خروجی:

 

EmployeeID SaleAmount MonthName
1 1000 SaleJan
2 1500 SaleFeb
3 1200 SaleMar

 

حال می‌توانیم MAX را اعمال کنیم.

SELECT

EmployeeID,

MAX(SaleAmount)

FROM

(

SELECT *

FROM EmployeeSales

UNPIVOT

(

SaleAmount

FOR MonthName

IN

(

SaleJan,

SaleFeb,

SaleMar

)

) U

) T

GROUP BY EmployeeID



مثال عملی: بیشترین نمره دانشجو

فرض کنید جدول زیر را داریم:

 

CREATE TABLE StudentScores

(

StudentID INT,

Exam1 INT,

Exam2 INT,

Exam3 INT,

Exam4 INT

)

داده‌ها:

 

INSERT INTO StudentScores

VALUES

(1,15,17,19,18),

(2,20,18,16,19),

(3,14,13,15,17)

 

پیدا کردن بیشترین نمره:

SELECT

StudentID,

(

SELECT MAX(Score)

FROM

(

VALUES

(Exam1),

(Exam2),

(Exam3),

(Exam4)

) X(Score)

) AS MaxScore

FROM StudentScores

 

خروجی:

StudentID  MaxScore
1 19
2 20
3 17

 

مثال عملی: بیشترین فروش فصلی

جدول:

 

CREATE TABLE SalesReport

(

ProductID INT,

SpringSale DECIMAL(18,2),

SummerSale DECIMAL(18,2),

AutumnSale DECIMAL(18,2),

WinterSale DECIMAL(18,2)

)

 

کوئری:

 

SELECT

ProductID,

(

SELECT MAX(SaleValue)

FROM

(

VALUES

(SpringSale),

(SummerSale),

(AutumnSale),

(WinterSale)

) X(SaleValue)

) AS BestSeasonSale

FROM SalesReport



مدیریت NULL ها

گاهی برخی ستون‌ها دارای مقدار NULL هستند.

مثال:

SaleMar SaleFeb SaleJan 
1000 1200  NULL 

 

 

در این حالت:

 

SELECT

(

SELECT MAX(Value)

FROM

(

VALUES

(SaleJan),

(SaleFeb),

(SaleMar)

) X(Value)

)

 

تابع MAX به طور پیش‌فرض مقادیر NULL را نادیده می‌گیرد.

 

استفاده از ISNULL

در صورت نیاز:

 

VALUES

(ISNULL(SaleJan,0)),

(ISNULL(SaleFeb,0)),

(ISNULL(SaleMar,0))



استفاده از GREATEST در SQL Server 2022

از SQL Server 2022 به بعد تابع جدیدی معرفی شده است:

 

SELECT

GREATEST

(

SaleJan,

SaleFeb,

SaleMar

)

AS MaxSale

FROM EmployeeSales

 

این تابع دقیقاً برای پیدا کردن بزرگ‌ترین مقدار میان چند عبارت طراحی شده است.

مثال

SELECT

EmployeeID,

GREATEST

(

Salary1,

Salary2,

Salary3

)

AS HighestSalary

FROM Employees

 

خروجی:

 

EmployeeID HighestSalary

1 7000

2 9000

3 4500



مزایای GREATEST در SQL

  • بسیار ساده

  • خوانایی بالا

  • سرعت مناسب

  • مناسب برای چندین ستون

  • محدودیت

 

فقط در SQL Server 2022 و نسخه‌های جدیدتر پشتیبانی می‌شود.



مزایای GREATEST در SQL

مقایسه روش‌ها

روش  خوانایی  سرعت  نسخه SQL Server
CASE  متوسط خوب   همه نسخه‌ها
VALUES + MAX  بسیار خوب  بسیار خوب SQL Server 2008+
CROSS APPLY عالی  بسیار خوب SQL Server 2008+
UNPIVOT  خوب   متوسط همه نسخه‌ها
GREATEST عالی  عالی  SQL Server 2022+

 

 

بهترین روش کدام است؟

اگر از SQL Server 2022 استفاده می‌کنید:

 

GREATEST()

 

بهترین و ساده‌ترین انتخاب است.

 

اگر از نسخه‌های قدیمی‌تر استفاده می‌کنید:

 

VALUES + MAX

 

یا

 

CROSS APPLY + VALUES

 

بهترین گزینه‌ها محسوب می‌شوند زیرا هم خوانایی بالایی دارند و هم نگهداری آن‌ها آسان است.

 

جمع‌بندی

برای پیدا کردن ماکزیمم مقدار از چندین ستون در SQL Server روش‌های مختلفی وجود دارد.
در نسخه‌های جدید SQL Server می‌توان به سادگی از تابع GREATEST() استفاده کرد، اما در نسخه‌های قدیمی‌تر معمولاً روش VALUES + MAX یا CROSS APPLY بهترین انتخاب است.
این روش‌ها امکان مقایسه چندین ستون را فراهم می‌کنند و برای سناریوهایی مانند محاسبه بیشترین فروش، بالاترین نمره، بیشترین حقوق یا بیشترین مقدار ثبت‌شده در چند ستون بسیار کاربردی هستند.
انتخاب روش مناسب باعث افزایش خوانایی کد، بهبود نگهداری و عملکرد بهتر کوئری‌ها خواهد شد.

محصولات مرتبط

کاربران ما

شما هم نظرتون با ما دریاره “چگونگی ماکزیمم مقدار از چندین ستون در جدول SQL Server بیابیم؟” اشتراک بزارید

برای ارسال نظر لطفا ورود یا ثبت نام کنید

منو