SQL में, MAX()
फ़ंक्शन एक समग्र फ़ंक्शन है जो किसी दिए गए एक्सप्रेशन में अधिकतम मान देता है।
यह कैसे काम करता है, यह दिखाने के लिए नीचे कुछ बुनियादी उदाहरण दिए गए हैं।
नमूना तालिका
मान लीजिए हमारे पास निम्न तालिका है:
SELECT * FROM Products;
परिणाम:
+-------------+------------+---------------------------------+----------------+-----------------------------------------+ | ProductId | VendorId | ProductName | ProductPrice | ProductDescription | |-------------+------------+---------------------------------+----------------+-----------------------------------------| | 1 | 1001 | Left handed screwdriver | 25.99 | Purple. Includes left handed carry box. | | 2 | 1001 | Long Weight (blue) | 14.75 | Includes a long wait. | | 3 | 1001 | Long Weight (green) | 11.99 | Approximate 30 minute waiting period. | | 4 | 1002 | Sledge Hammer | 33.49 | Wooden handle. Free wine glasses. | | 5 | 1003 | Chainsaw | 245.00 | Orange. Includes spare fingers. | | 6 | 1003 | Straw Dog Box | NULL | Tied with vines. Very chewable. | | 7 | 1004 | Bottomless Coffee Mugs (4 Pack) | 9.99 | Brown ceramic with solid handle. | +-------------+------------+---------------------------------+----------------+-----------------------------------------+
उदाहरण
उस तालिका से अधिकतम मूल्य प्राप्त करने के लिए हम निम्नलिखित क्वेरी का उपयोग कर सकते हैं।
SELECT MAX(ProductPrice)
FROM Products;
परिणाम:
+--------------------+ | (No column name) | |--------------------| | 245.00 | +--------------------+
इस मामले में, कीमत की जानकारी ProductPrice
. में स्टोर की जाती है कॉलम, और इसलिए हम इसे MAX()
. के तर्क के रूप में पास करते हैं फ़ंक्शन, जो तब गणना करता है और परिणाम देता है।
कॉलम उपनामों का उपयोग करना
आप देखेंगे कि पिछले परिणामों में कॉलम नाम शामिल नहीं है। कुछ DBMS MAX(ProductPrice)
. जैसी किसी चीज़ का उपयोग कर सकते हैं कॉलम नाम के रूप में। यह अपेक्षित है, क्योंकि MAX()
फ़ंक्शन कोई कॉलम नहीं लौटाता है। आप एक उपनाम निर्दिष्ट करके आसानी से एक कॉलम नाम प्रदान कर सकते हैं।
SELECT MAX(ProductPrice) AS MaximumPrice
FROM Products;
परिणाम:
+----------------+ | MaximumPrice | |----------------| | 245.00 | +----------------+
फ़िल्टर किए गए परिणाम
MAX()
फ़ंक्शन क्वेरी द्वारा लौटाई गई पंक्तियों पर काम करता है। इसलिए यदि आप परिणामों को फ़िल्टर करते हैं, तो MAX()
. का परिणाम प्रतिबिंबित करेंगे।
SELECT MAX(ProductPrice) AS MaximumPrice
FROM Products
WHERE VendorId = 1001;
परिणाम:
+----------------+ | MaximumPrice | |----------------| | 25.99 | +----------------+
इस मामले में, निर्दिष्ट विक्रेता द्वारा पेश किए गए सभी उत्पादों में से अधिकतम मूल्य 25.99 है।
NULL
मान
MAX()
फ़ंक्शन किसी भी NULL
को अनदेखा करता है मूल्य। ऊपर हमारी नमूना तालिका में, उत्पाद संख्या 6
मिल गया है NULL
इसके ProductPrice
. में कॉलम, लेकिन हमारे MAX()
. में उस पर ध्यान नहीं दिया गया उदाहरण।
आपके DBMS और आपकी सेटिंग्स के आधार पर, आपको यह चेतावनी दिखाई दे भी सकती है और नहीं भी, कि NULL
परिणाम सेट में मान हटा दिए गए थे।
आप जो देख सकते हैं उसका एक उदाहरण यहां दिया गया है:
SELECT MAX(ProductPrice) AS MaximumPrice
FROM Products;
परिणाम:
+----------------+ | MaximumPrice | |----------------| | 245.00 | +----------------+ Warning: Null value is eliminated by an aggregate or other SET operation.
यह सब हमें बताता है कि कॉलम में कम से कम एक NULL
है मूल्य, और यह कि परिणामों की गणना करते समय इसे अनदेखा कर दिया गया था।
दिनांक/समय डेटा
आप MAX()
का उपयोग कर सकते हैं दिनांक/समय मानों पर।
मान लीजिए हमारे पास निम्न तालिका है:
SELECT PetName, DOB
FROM Pets;
परिणाम:
+-----------+------------+ | PetName | DOB | |-----------+------------| | Fluffy | 2020-11-20 | | Fetch | 2019-08-16 | | Scratch | 2018-10-01 | | Wag | 2020-03-15 | | Tweet | 2020-11-28 | | Fluffy | 2020-09-17 | | Bark | NULL | | Meow | NULL | +-----------+------------+
हम उपयोग कर सकते हैं MAX()
जन्म की अधिकतम तिथि जानने के लिए (DOB
)।
SELECT MAX(DOB) AS MaxDOB
FROM Pets;
परिणाम:
+------------+ | MaxDOB | |------------| | 2020-11-28 | +------------+
यह सबसे छोटे पालतू जानवर की जन्म तिथि होगी। जैसा कि उल्लेख किया गया है, यह किसी भी NULL
. पर ध्यान नहीं देता है मान।
चरित्र डेटा
जब वर्ण डेटा कॉलम के साथ प्रयोग किया जाता है, MAX()
मिलान क्रम में उच्चतम मान पाता है।
उदाहरण:
SELECT MAX(ProductName) AS MaximumProductName
FROM Products;
परिणाम:
+----------------------+ | MaximumProductName | |----------------------| | Straw Dog Box | +----------------------+
DISTINCT
कीवर्ड
आपका DBMS DISTINCT
. की अनुमति दे सकता है MAX()
. के साथ प्रयोग किया जाने वाला कीवर्ड समारोह। यदि ऐसा है, तो शायद यह ISO SQL मानक का अनुपालन करने के लिए है।
इसलिए, आप ऐसा करने में सक्षम हो सकते हैं:
SELECT MAX(DISTINCT ProductPrice) AS MaximumPrice
FROM Products;
परिणाम:
+----------------+ | MaximumPrice | |----------------| | 245.00 | +----------------+
लेकिन इसका नतीजों पर कोई असर नहीं पड़ेगा.
DISTINCT
अन्य संदर्भों के साथ प्रयोग किए जाने पर कीवर्ड बहुत उपयोगी हो सकता है (जैसे COUNT()
. के साथ फ़ंक्शन), लेकिन इसका कोई मतलब नहीं है जब इसका उपयोग MAX()
. के साथ किया जाता है . DISTINCT
कीवर्ड डुप्लिकेट को हटा देता है, लेकिन MAX()
. के मामले में इससे कोई फर्क नहीं पड़ेगा क्योंकि MAX()
इस बात पर ध्यान दिए बिना कि कितनी पंक्तियाँ समान अधिकतम मान साझा करती हैं, वही परिणाम देता है।
विंडो फ़ंक्शन
आपके DBMS के आधार पर, आप OVER
. का उपयोग करने में सक्षम हो सकते हैं आपके MAX()
. के साथ क्लॉज विंडो फ़ंक्शन बनाने के लिए फ़ंक्शन।
एक विंडो फ़ंक्शन क्वेरी पंक्तियों के एक सेट पर एक समग्र-जैसा ऑपरेशन करता है। यह प्रत्येक क्वेरी पंक्ति के लिए परिणाम उत्पन्न करता है। यह एक समग्र ऑपरेशन के विपरीत है, जो क्वेरी पंक्तियों को एक परिणाम पंक्ति में समूहित करता है।
अवधारणा को प्रदर्शित करने के लिए यहां एक उदाहरण दिया गया है।
हम पहले ही Products
देख चुके हैं टेबल। हमारे डेटाबेस में एक Customers
भी है तालिका, और इसमें निम्न डेटा शामिल है:
+--------------+----------------------+-------------------+------------+-----------------+------------+-----------+----------------+ | CustomerId | CustomerName | PostalAddress | City | StateProvince | ZipCode | Country | Phone | |--------------+----------------------+-------------------+------------+-----------------+------------+-----------+----------------+ | 1001 | Palm Pantry | 20 Esplanade | Townsville | QLD | 2040 | AUS | (308) 555-0100 | | 1002 | Tall Poppy | 12 Main Road | Columbus | OH | 43333 | USA | (310) 657-0134 | | 1003 | Crazy Critters | 10 Infinite Loops | Cairns | QLD | 4870 | AUS | (418) 555-0143 | | 1004 | Oops Media | 4 Beachside Drive | Perth | WA | 1234 | AUS | (405) 443-5987 | | 1005 | Strange Names Inc. | 789 George Street | Sydney | NSW | 2000 | AUD | (318) 777-0177 | | 1006 | Hi-Five Solutionists | 5 High Street | Highlands | HI | 1254 | AUS | (415) 413-5182 | +--------------+----------------------+-------------------+------------+-----------------+------------+-----------+----------------+
हम इन तालिकाओं से डेटा पुनर्प्राप्त कर सकते हैं और उन्हें एक परिणाम सेट के रूप में शामिल होने का उपयोग करके प्रस्तुत कर सकते हैं।
हम MAX()
. का भी उपयोग कर सकते हैं OVER
. के साथ कार्य करें डेटा पर विंडो फ़ंक्शन लागू करने के लिए क्लॉज।
SELECT
v.VendorName,
p.ProductName,
p.ProductPrice,
MAX(ProductPrice) OVER (PARTITION BY v.VendorName) AS "Maximum Price For This Vendor"
FROM Products p
INNER JOIN Vendors v
ON v.VendorId = p.VendorId
ORDER BY VendorName, ProductPrice, "Maximum Price For This Vendor";
परिणाम:
+---------------+---------------------------------+----------------+---------------------------------+ | VendorName | ProductName | ProductPrice | Maximum Price For This Vendor | |---------------+---------------------------------+----------------+---------------------------------| | Katty Kittens | Bottomless Coffee Mugs (4 Pack) | 9.99 | 9.99 | | Mars Supplies | Long Weight (green) | 11.99 | 25.99 | | Mars Supplies | Long Weight (blue) | 14.75 | 25.99 | | Mars Supplies | Left handed screwdriver | 25.99 | 25.99 | | Pedal Medals | Straw Dog Box | NULL | 245.00 | | Pedal Medals | Chainsaw | 245.00 | 245.00 | | Randy Roofers | Sledge Hammer | 33.49 | 33.49 | +---------------+---------------------------------+----------------+---------------------------------+
इस मामले में हमने OVER
. का इस्तेमाल किया हमारे MAX()
. के साथ क्लॉज विक्रेता के नाम से परिणाम को विभाजित करने का कार्य।
ऐसा करने से, हम प्रत्येक उत्पाद के लिए मूल्य की जानकारी, साथ ही उस विक्रेता से सभी उत्पादों के लिए अधिकतम मूल्य वापस करने में सक्षम थे। विक्रेता के बदलते ही यह अधिकतम मूल्य बदल जाता है (जब तक कि कई विक्रेताओं की अधिकतम कीमत समान न हो), लेकिन एक ही विक्रेता के सभी उत्पादों के लिए समान रहता है।
इस अवधारणा को SQL में अन्य समग्र कार्यों पर भी लागू किया जा सकता है, जैसे SUM()
, MIN()
, AVG()
, और COUNT()
।