Yazması en kolay sorgu MySQL içindir (katı ANSI ayarlarıyla değil). Standart dışı yapıyı kullanır:
SELECT key, value
FROM tableX
GROUP BY key ;
Sıkı ayarların ve ONLY_FULL_GROUP_BYvarsayılan ayarların bulunduğu son sürümde (5.7 ve 8.0+) ANY_VALUE(), 5.7'de eklenmiş olan işlevi kullanabilirsiniz :
SELECT key, ANY_VALUE(value) AS value
FROM tableX
GROUP BY key ;
Pencere işlevine sahip diğer DBMS'lerde (Postgres, SQL-Server, Oracle, DB2 gibi), bunları bu şekilde kullanabilirsiniz. Avantaj, sonuçtaki diğer sütunları da seçebilmenizdir ( keyve dışında 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 ;
Yukarıdakilerin eski sürümleri ve diğer tüm DBMS'ler için hemen hemen her yerde işe yarayan genel bir yol. Dezavantajı, bu yaklaşımla diğer sütunları seçememenizdir. Başka gibi o toplama işlevleri olan MIN()ve MAX()(biraz, metin, lekeler gibi) bazı DBMSs bazı veri türleri ile işi yok:
SELECT key, MIN(value) AS value
FROM tableX
GROUP BY key ;
PostgreSQL, DISTINCT ONkullanılabilecek standart dışı özel bir operatöre sahiptir. İsteğe bağlı ORDER BY, her gruptan hangi satırın seçileceğini seçmektir:
SELECT DISTINCT ON (key) key, value
FROM tableX
-- ORDER BY key, <some_other_expressions> ;