2010-10-28 18 views
7

अरे, मुझे SQL क्वेरी के साथ कोई समस्या है। चलो इस उदाहरण लेते डेटाएसक्यूएल: एकाधिक कॉलम पर ग्रुप BY और MAX का उपयोग

itemID catID attrib1 attrib2 
    1  1  10  5 
    2  1  10  7 
    3  1  5  10 
    4  2  18  15 

मैं जाहिर

(attrib1 attrib2 अधिक प्राथमिकता दी जाती होने के साथ) प्रत्येक श्रेणी के लिए सबसे अच्छा आइटम वापस चाहते हैं, "चयन CatID, मैक्स (attrib1), मैक्स (attrib2) से catID द्वारा test_table ग्रुप "काम नहीं करता है क्योंकि यह पहली बिल्ली के लिए 10 & 10 लौटाएगा।

तो क्या वैसे भी MySQL को attrib2 पंक्ति से अधिकतम मान चुनने के लिए कहने के लिए है, लेकिन केवल उन लोगों पर विचार करें जहां attrib1 भी अधिकतम मान है? यानी निम्न डेटा

catID attrib1 attrib2 
    1  10  7 
    2  18  15 
लौट

उत्तर

6

आप सबसे अच्छा attrib1 मान प्राप्त कर सकते हैं, और फिर attrib2 मूल्यों में शामिल होने और प्रत्येक के लिए उन में से सबसे अच्छा पाने के attrib1 मान:

select t2.catID, t2.attrib1, max(t2.attrib2) 
from 
(
    select catID, max(attrib1) as attrib1 
    from test_table 
    group by catID 
) t1 
inner join test_table t2 on t2.catID = t1.catID and t2.attrib1 = t1.attrib1 
group by t2.catID, t2.attrib1 
+0

सभी त्वरित उत्तरों के लिए धन्यवाद। ऐसा करने के विभिन्न तरीकों को देखना भी अच्छा लगा। – Charles

+0

क्या यह काम करता है? 3 लौटने वाले मान अलग-अलग पंक्तियों में से एक होना चाहिए। – Ryo

1
SELECT tt.catId, tt.attrib1, MAX(tt.attrib2) 
FROM test_table tt 
GROUP BY tt.catID, tt.attrib1 
WHERE tt.attrib1 = (SELECT MAX(t2.attrib1) FROM test_table t2 WHERE t2.catID = tt.catID) 
-1
SELECT catID, max1, max2 FROM 
((SELECT Max(attrib1) as max1, catID GROUP BY attrib1) as t1 
INNER JOIN 
(SELECT MAX(attrib2) as max2, catID GROUP BY attrib2) as t2 
ON t1.catID = t2.catID) as t3 
1

उपयोग:

SELECT x.catid, 
     x.max_attrib1 AS attrib1, 
     (SELECT MAX(attrib2) 
      FROM YOUR_TABLE y 
     WHERE y.catid = x.catid 
      AND y.attrib1 = x.max_attrib1) AS attrib2 
    FROM (SELECT t.catid, 
       MAX(t.attrib1) AS max_attrib1 
      FROM YOUR_TABLE t 
     GROUP BY t.catid) x 
संबंधित मुद्दे