दो या अधिक क्षेत्रों से सबसे बड़ा मूल्य


84

मुझे दो क्षेत्रों से सबसे बड़ा मूल्य प्राप्त करने की आवश्यकता है:

SELECT MAX(field1), MAX(field2)

अब, मैं इन दोनों से सबसे बड़ा मूल्य कैसे प्राप्त कर सकता हूं?


8
GREATEST()सबसे LEAST()छोटे के लिए सबसे बड़ी इसी तरह के लिए।
जेम्स ओर्वेक

जवाबों:


170

आप GREATEST()फ़ंक्शन का उपयोग करना चाहते हैं :

SELECT GREATEST(field1, field2);

यदि आप सभी पंक्तियों में से अधिकतम प्राप्त करना चाहते हैं, तो आप निम्नलिखित का उपयोग कर सकते हैं:

SELECT GREATEST(MAX(field1), MAX(field2));

उदाहरण 1:

SELECT GREATEST(1, 2);
+----------------+
| GREATEST(1, 2) |
+----------------+
|              2 |
+----------------+
1 row in set (0.00 sec)

उदाहरण 2:

CREATE TABLE a (a int, b int);

INSERT INTO a VALUES (1, 1);
INSERT INTO a VALUES (2, 1);
INSERT INTO a VALUES (3, 1);
INSERT INTO a VALUES (1, 2);
INSERT INTO a VALUES (1, 4);

SELECT GREATEST(MAX(a), MAX(b)) FROM a;
+--------------------------+
| GREATEST(MAX(a), MAX(b)) |
+--------------------------+
|                        4 |
+--------------------------+
1 row in set (0.02 sec)

पता नहीं क्यों, लेकिन केवल GREATEST(MAX(field1), MAX(field2))काम कर रहा है। गलत गलत नंबर लौटाया जाता है (सबसे बड़ा नहीं)
Qiao

1
@Qiao: हाँ, आपको SELECT GREATEST(MAX(field1), MAX(field2));सभी पंक्तियों से पूर्ण अधिकतम प्राप्त करने की आवश्यकता होगी । यदि आप उपयोग करते SELECT GREATEST(field1, field2);हैं तो आपको प्रत्येक पंक्ति के लिए फ़ील्ड 1 और फ़ील्ड 2 के बीच अधिकतम के साथ एक परिणाम-सेट मिलेगा।
डैनियल वेसलो

यही कारण है कि मैं देख रहा था कि मुझे यकीन है कि इसके लिए एक समारोह है, लेकिन मुझे नाम का कोई सुराग नहीं था, अब यह बिल्कुल सही समझ में आता है :)
एमिल बोरकोनी

40

यदि आप प्रत्येक पंक्ति के लिए GREATEST () का चयन कर रहे हैं

SELECT GREATEST(field1, field2)

यदि फ़ील्ड में से एक NULL है तो यह NULL को लौटा देगा । आप इसे हल करने के लिए IFNULL का उपयोग कर सकते हैं

SELECT GREATEST(IFNULL(field1, 0), IFNULL(field2, 0))

हाँ, दुख की बात है कि आप उन सभी को IFNULLतब भी करते हैं जब आपके पास तुलना करने के लिए दो दर्जन फ़ील्ड होते हैं!
इफिडी ओकोंकोव

6
mysql> SELECT GREATEST(2,0);
        -> 2

इसलिए कोशिश करें:

mysql> SELECT GREATEST(MAX(field1), MAX(field2));

1
SELECT max( CASE
                WHEN field1 > field2 THEN field1
                ELSE field2
            END ) as biggestvalue 
FROM YourTable;

यह समाधान संभव नहीं है जब मेरे पास 100 कॉलम हैं।
दीपक

1
@Deepak, ठीक है, लेकिन 10 साल पहले का एक जवाब जब मुझे "GREATEST" या "LEAST" फ़ंक्शन कॉल का पता नहीं था, लेकिन मूल पोस्ट में 2 कॉलमों के बारे में पूछा गया था, और यदि आपके पास 100 स्तंभों वाली एक तालिका है यह इसी तरह के संदर्भ में है, तो आप एक गंभीर डेटाबेस डिजाइन समस्या पर पुनर्विचार करने के लिए है।
DRAP

हां सही है, स्पष्टीकरण के लिए धन्यवाद। अब आपकी टिप्पणी दूसरों को मदद करेगी कि कब क्या उपयोग करना है।
दीपक

0

MIN / MAX के साथ GREATEST / LEAST का उपयोग

GREATEST / LEAST : स्तंभों के साथ उपयोग किया जाता है, जब आप विभिन्न स्तंभों से अधिकतम या न्यूनतम मान प्राप्त करना चाहते हैं।

न्यूनतम / अधिकतम : पंक्तियों के साथ उपयोग किया जाता है, जब आप विभिन्न पंक्तियों से अधिकतम या न्यूनतम मान प्राप्त करना चाहते हैं:

उदाहरण तालिका:

यहां छवि विवरण दर्ज करें

SELECT GREATEST(col_a, col_b, col_c) FROM temp;

यहां छवि विवरण दर्ज करें

SELECT MIN(GREATEST(col_a, col_b, col_c)) FROM temp; # 3 as output
SELECT MAX(GREATEST(col_a, col_b, col_c)) FROM temp; # 9 as output


SELECT LEAST(col_a, col_b, col_c) FROM temp;

यहां छवि विवरण दर्ज करें

SELECT MIN(LEAST(col_a, col_b, col_c)) FROM temp; # 1 as output
SELECT MAX(LEAST(col_a, col_b, col_c)) FROM temp; # 7 as output
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.