Introduzione
In questo articolo, impareremo a utilizzare la funzione aggregate Max nei nostri comandi SQL Postgres da più prospettive, per ottenere un livello più profondo di comprensione. Qui discuteremo:
- Cosa? Dal punto di vista principiante, cosa fa la funzione MAX?
- Perché? In quali situazioni dovremmo usare la funzione Max ()?
- Come? Come usiamo questa funzione nel nostro SQL?
- Altro Faremo anche un certo uso del costrutto GROUP BY.
Prerequisiti
- Comprensione a livello principiante della scrittura SQL per PostgreSQL (o Oracle, MySQL, MS SQL Server, ecc.) utilizzando lo strumento PG Admin o qualche altro strumento di amministrazione db, o tramite codice o script/linguaggi di codifica come PHP, Python, Javascript, Java, C#, ASP.Net, VB.Net, Rubino, Nodo.js, ecc.) che forniscono una connessione al database, nonché un metodo per l’invio delle query SQL del database, per ottenere dati o apportare modifiche al database.
- Comprensione dell’uso di alcune istruzioni SQL (PL/SQL) di base, come
SELECT
,FROM
eGROUP BY
. - Conoscenza di cosa sono una stringa e una funzione.
Qual è la funzione MAX () e come funziona?
La funzione Postgres MAX()
restituisce il valore più alto (massimo) da un insieme di numeri.
Sintassi
1
|
i_highest_of_set := MAX(set_of_numbers);
|
Perché e quando si usa la funzione MAX ()?
Ogni volta che hai un set di numeri in cui vuoi sapere quale di quel set è il più alto nel set.
Iniziamo con un esempio semplice
Inizieremo con un esempio facile da capire. Il nostro set di dati iniziale è una tabella chiamata coding_languages.
id_tech | t_name | i_rapid_dev |
---|---|---|
0 | Python | 7 |
1 | Java | 5 |
2 | PHP | 9 |
3 | Javascript | 8 |
Presso la nostra azienda di sviluppo di software, la tabella di cui sopra denominato coding_languages
dispone di tre campi, tra cui:
-
id_tech
è il nostro identificatore univoco. -
t_name
è il nome del linguaggio di codifica. -
i_rapid_dev
è una valutazione intera di quanto rapidamente un codificatore medio può svilupparsi usando il linguaggio.
L’obiettivo è scoprire quale lingua ha il punteggio più alto in termini di rapido sviluppo (i_rapid_dev
). Scriviamo il nostro script SQL per utilizzare la funzione MAX
per recuperare il t_name
che ha il valore più alto nella colonna i_rapid_dev
nel nostro recordset di database PostgreSQL:
1
2 3 4 5 6 7 8 |
SELEZIONARE
id_tech , t_name , MAX(i_rapid_dev) DA coding_languages GROUP BY i_rapid_dev; |
Nota per SQL esempio di cui sopra: Questo è dove usiamo la nostra conoscenza di SQL Gruppi. Puoi pensarlo in questo modo: se vuoi trovare il massimo di più di un numero, devi considerare un insieme di numeri.
Come funziona l’istruzione SQL sopra? Lo faremo passo dopo passo:
- (1)
SELECT
: Stiamo dicendo al motore SQL di PostgreSQL che vogliamo un massimo di tutti i valori (perché nessuna clausola WHERE o HAVING) nella colonnai_rapid_dev
. - (2)
FROM
: Specificare la tabellacoding_languages
da cui recuperare i nostri dati. - (3)
GROUP BY
: Dicendo a Postgres che vogliamo raggruppare i dati. La funzione MAX (), essendo una funzione aggregata, richiede il raggruppamento dei nostri dati.
La query di cui sopra restituisce| / id_tech / t_name | i_rapid_dev||:—:|—|————:| |2 / PHP / 9 /
Ora sappiamo che PHP è il più veloce in termini di sviluppo rapido.
Un altro esempio di utilizzo della funzione SQL “Max” in PostgreSQL
Il mini progetto: i dipendenti hanno valutato le tecnologie utilizzate nella nostra azienda e vogliono conoscere la tecnologia con il più alto grado. Qui esploreremo un altro uso relativamente semplice di MAX()
mentre introduciamo la parola chiave “AVERE”. Ecco il nostro set di dati ” raw “con il nome della tabella di”technologies”:
id_tech | t_name_user | t_name_tech | t_category_tech | i_grade |
---|---|---|---|---|
0 | Ted | Java | Lang | 4 |
1 | Bif | Mongo | NoSQL | 16 |
2 | Susan | MySQL | RDB | 8 |
3 | Tim | PostgreSQL | RDB | 16 |
4 | Gary | Python | Lang | 20 |
5 | Sammy | PHP | Lang | 12 |
andiamo piano come procedere. Vogliamo costruire una query che farà più di una cosa, tra cui:
- (1) Considera solo le righe nel nostro set di dati in cui il valore del campo _t_categorytech (colonna) è uguale a “Lang”. Questo è dove la clausola HAVING è utile. Produrrà 3 righe. Riesci a capire perche’? Suggerimento: cerca nella tabella sopra il valore “Lang”. Notate che ce ne sono tre? In quale colonna sono?
- (2) Restituisce il valore nel campo _t_nametech per quelle 3 righe perché vogliamo sapere con quali tecnologie vanno i gradi.
- (3) Non ci interessa chi ha fatto la valutazione, quindi nessuna menzione della colonna _t_nameuser.
- (4) Ottieni un MASSIMO di SOMMA dei valori di quelle 3 righe usando la colonna _igrade.
- (5) Utilizzare GROUP BY per raggruppare le colonne appropriate.
Analisi del SQL di cui sopra:
- (1)
SELECT
: Stiamo filtrando la nostra tabella Postgres per: (a) Mostra la colonnat_name_tech
, (b) calcola la somma dei gradi (Sum(i_grade)
) per ogni data tecnologia e (c) Mostra il massimo di tali somme (Max(i_sum_of_grades)
) e assegna un nome al risultato comei_highest_grade
. - (2)
FROM
: Specificando la tabellacoding_languages
come fonte dei nostri dati. - (3)
GROUP BY
: Notifica a PostgreSQL che stiamo raggruppando. La funzioneMAX
richiede per noi di raggruppare i dati che Postgres sta riassumendo internamente e trovare il più alto di. - (4)
HAVING
: Qui è dove istruiamo PostgreSQL a filtrare nelle righe che hanno “Lang” nel campot_category_tech
.
La query di cui sopra restituisce:
t_name_tech | t_category_tech | i_grade |
---|---|---|
PHP | Lang | 12 |
Note
- Perché non abbiamo il nome di alcune delle nostre variabili e le colonne della tabella con il prefisso “i” o “t”? Usiamo ” i “per significare intero e” t ” per significare testo o stringa.
- Vi invitiamo a cercare i nostri altri articoli che utilizzano il potente
GROUP BY
Postgres clausola.
Conclusione
Qui abbiamo imparato quando e come è meglio usare la funzione MAX()
in PostgreSQL per trovare il numero con valore più alto in un insieme di numeri. Abbiamo usato sia esempi di livello principiante che più difficili, aumentando la difficoltà, in modo da rendere il processo di apprendimento il più semplice possibile perché SQL può a volte essere difficile da capire, specialmente quando si utilizzano le clausole GROUP BY
e HAVING
per lavorare con sottoinsiemi di dati.