Come posso ottenere il MIN () di due campi in Postgres?


140

Diciamo che ho un tavolo come questo:

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

Vorrei selezionare il minimo di score_a e score_b. In altre parole, qualcosa del tipo:

SELECT name, MIN(score_a, score_b)
FROM table

I risultati, ovviamente, sarebbero:

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

Tuttavia, quando provo questo in Postgres, ottengo "Nessuna funzione corrisponde al nome e ai tipi di argomento indicati. Potrebbe essere necessario aggiungere cast di tipi espliciti". MAX () e MIN () sembrano funzionare su più righe anziché su colonne.

È possibile fare quello che sto tentando?

Risposte:


247

ULTIMO (a, b):

Le funzioni GREATESTe LEASTselezionano il valore più grande o più piccolo da un elenco di qualsiasi numero di espressioni. Le espressioni devono essere tutte convertibili in un tipo di dati comune, che sarà il tipo di risultato (vedere la Sezione 10.5 per i dettagli). I valori NULL nell'elenco vengono ignorati. Il risultato sarà NULL solo se tutte le espressioni vengono valutate come NULL.

Si noti che GREATESTe LEASTnon sono nello standard SQL, ma sono un'estensione comune. Alcuni altri database li restituiscono NULL se un argomento è NULL, anziché solo quando tutti sono NULL ...


21
Per le persone come me che avranno anche bisogno MAX()di due valori, è GREATEST(a, b):)
vektor


-16

Puoi ottenere la risposta inserendo tali dati in una colonna come questa:

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

Qui, stiamo inserendo il valore minimo tra score_ae score_be stampando lo stesso memorizzando quel valore in una colonna denominata minimum_score.


min(expression)esiste solo . Definizione dal documento: il valore minimo dell'espressione attraverso tutti i valori di input con `espressione` è qualsiasi tipo numerico, stringa, data / ora, rete o tipo di enum o array di questi tipi
charlesdg,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.