n=2 के लिए आप
. कर सकते हैंSELECT max(column1) m
FROM table t
GROUP BY column2
UNION
SELECT max(column1) m
FROM table t
WHERE column1 NOT IN (SELECT max(column1)
WHERE column2 = t.column2)
किसी भी n के लिए आप वर्णित दृष्टिकोणों का उपयोग कर सकते हैं यहांए> विभाजन पर रैंक अनुकरण करने के लिए।
संपादित करें:वास्तव में यह लेख आपको वही देगा जो आपको चाहिए।
मूल रूप से यह कुछ इस तरह है
SELECT t.*
FROM
(SELECT grouper,
(SELECT val
FROM table li
WHERE li.grouper = dlo.grouper
ORDER BY
li.grouper, li.val DESC
LIMIT 2,1) AS mid
FROM
(
SELECT DISTINCT grouper
FROM table
) dlo
) lo, table t
WHERE t.grouper = lo.grouper
AND t.val > lo.mid
grouper
बदलें उस कॉलम के नाम के साथ जिसे आप समूहबद्ध करना चाहते हैं और val
उस कॉलम के नाम के साथ जो मान रखता है।
यह पता लगाने के लिए कि यह वास्तव में कैसे कार्य करता है, सबसे आंतरिक क्वेरी से चरण-दर-चरण जाएं और उन्हें चलाएं।
साथ ही, थोड़ा सा सरलीकरण भी है - वह सबक्वेरी जो mid
. को ढूंढती है यदि कुछ श्रेणी में पर्याप्त मान नहीं हैं तो NULL वापस आ सकता है, इसलिए उसमें से कुछ स्थिरांक के लिए COALESCE होना चाहिए जो तुलना में समझ में आता है (आपके मामले में यह वैल के डोमेन का न्यूनतम होगा, लेख में यह MAX है)।पी>
संपादित करें2: मैं यह उल्लेख करना भूल गया कि यह LIMIT 2,1 है जो n (LIMIT n,1) निर्धारित करता है।