Postgres'te iki alanın MIN () değerini nasıl edinebilirim?


140

Diyelim ki böyle bir tablo var:

name | score_a | score_b
-----+---------+--------
 Joe |   100   |   24
 Sam |    96   |  438
 Bob |    76   |  101
 ... |   ...   |  ...

Minimum skor_a ve skor_b'yi seçmek istiyorum. Başka bir deyişle, şöyle bir şey:

SELECT name, MIN(score_a, score_b)
FROM table

Sonuçlar elbette şöyle olur:

name | min
-----+-----
 Joe |  24
 Sam |  96
 Bob |  76
 ... | ...

Ancak, Postgres bunu denediğimde, "Hiçbir ad verilen ad ve bağımsız değişken türleriyle eşleşir. Açık tür dökümleri eklemeniz gerekebilir." MAX () ve MIN () , sütunlar yerine satırlar arasında çalışıyor gibi görünüyor .

Denediğim şeyi yapmak mümkün mü?

Yanıtlar:


247

EN AZ (a, b):

GREATESTVe LEASTişlevleri ifadeler herhangi bir sayıda listesinden en büyük veya en küçük değeri seçin. İfadelerin tümü, sonucun türü olacak ortak bir veri türüne dönüştürülebilir olmalıdır ( ayrıntılar için Bölüm 10.5'e bakın). Listedeki NULL değerler yok sayılır. Sonuç yalnızca tüm ifadeler NULL olarak değerlendirilirse NULL olur.

O Not GREATESTve LEASTSQL standardında değil, ortak bir uzantısıdır. Diğer bazı veritabanları, yalnızca tümü NULL olduğunda değil, herhangi bir bağımsız değişken NULL ise, NULL döndürmelerini sağlar ...


21
Benim gibi MAX()iki değere de ihtiyacı olacak insanlar için , bu GREATEST(a, b):)
vektör


-16

Bu verileri aşağıdaki gibi bir sütuna koyarak yanıt alabilirsiniz:

SELECT name, MIN(score_a, score_b) as minimum_score
FROM table

Burada, içinde minimum değeri koyarak score_ave score_bve adlı bir sütunda bu değeri depolayarak aynı baskı minimum_score.


sadece min(expression)var. Dokümandan tanım
charlesdg
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.