लिखने के लिए सबसे आसान क्वेरी MySQL (सख्त एएनएसआई सेटिंग्स के साथ नहीं) के लिए है। यह गैर-मानक निर्माण का उपयोग करता है:
SELECT key, value
FROM tableX
GROUP BY key ;
हाल के संस्करण (5.7 और 8.0+) में जहां सख्त सेटिंग्स और ONLY_FULL_GROUP_BY
डिफ़ॉल्ट हैं, आप ANY_VALUE()
5.7 में जोड़े गए फ़ंक्शन का उपयोग कर सकते हैं :
SELECT key, ANY_VALUE(value) AS value
FROM tableX
GROUP BY key ;
अन्य DBMS के लिए, जिसमें विंडो फ़ंक्शंस (जैसे Postgres, SQL-Server, Oracle, DB2) हैं, आप उन्हें इस तरह से उपयोग कर सकते हैं। लाभ यह है कि आप परिणाम में अन्य कॉलम भी चुन सकते हैं (इसके अलावा key
और value
):
SELECT key, value
FROM tableX
( SELECT key, value,
ROW_NUMBER() OVER (PARTITION BY key
ORDER BY whatever) --- ORDER BY NULL
AS rn --- for example
FROM tableX
) tmp
WHERE rn = 1 ;
उपरोक्त के पुराने संस्करणों और किसी अन्य DBMS के लिए, एक सामान्य तरीका जो लगभग हर जगह काम करता है। एक नुकसान यह है कि आप इस दृष्टिकोण के साथ अन्य कॉलम का चयन नहीं कर सकते हैं। एक और यह है कि कुछ डीबीएमएस (जैसे बिट, टेक्स्ट, ब्लब्स) में कुछ डेटाटाइप्स के साथ काम न करें MIN()
और MAX()
न करें:
SELECT key, MIN(value) AS value
FROM tableX
GROUP BY key ;
PostgreSQL का एक विशेष गैर-मानक DISTINCT ON
ऑपरेटर है जिसका उपयोग भी किया जा सकता है। वैकल्पिक ORDER BY
यह चुनने के लिए है कि हर समूह से किस पंक्ति को चुना जाए:
SELECT DISTINCT ON (key) key, value
FROM tableX
-- ORDER BY key, <some_other_expressions> ;