|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Bannato
Iscritto dal: May 2007
Città: Vivo in un mondo in cui tutti ti accusano e ti additano per un nonulla...
Messaggi: 9995
|
[MYSQL] Richiesta chiarimenti su interrogazioni DB
Salve ragazzi,
chi mi spiega a livelli "da asilo" le funzioni di: - GROUP BY (se ho capito bene serve ad ordinare il risultato della query in base ad un campo); - HAVING (che differenza intercorre col WHERE?) - ORDER BY (che differenza intercorre col GROUP BY?) Grazie mille! |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jul 2007
Messaggi: 1092
|
Ci provo.
L'order by serve per specificare l'ordine in cui vuoi che ti vengano restituiti i record. Quindi se li vuoi in ordine alfabetico rispetto ad un campo scrivi select * from tabella order by nome_campo di default l'ordinamento è crescente (asc) e quindi non è necessario specificarlo mentre se vuoi ottenere l'ordinamento decrescente usi desc (..order by nome_campo desc). Ovviamente è possibile specificare l'ordinamento su più campi. Se ad esempio scrivi: select * from tabella order by cognome,nome i record verranno ordinati in senso crescente per cognome, e a parità di cognome, in ordine crescente di nome. Il group by invece serve per ragguppare i record in base a uno o più campi. Ti faccio un esempio banale id tipo prezzo 1 1 10 2 1 5 3 2 2 4 2 4 se vuoi ottenere il totale dei prezzi raggruppando per tipo scriverai select tipo,sum(prezzo) as totale from tabella group by tipo e otterrai tipo totale 1 15 2 6 per rispondere alla tua ultima domanda mi rifaccio all'esempio precedente. Supponiamo tu voglia conoscere i tipi il cui totale è maggiore di 10 In questo caso non puoi usare il where ma usi l'having che interviene una volta che il raggruppamento è già stato fatto e quindi la tua query sarebbe select tipo,sum(prezzo) as totale from tabella group by tipo having totale > 10 La sintassi che ho usato è quella di mysql ma grosso modo è analoga in tutti i rdbms. |
|
|
|
|
|
#3 |
|
Bannato
Iscritto dal: May 2007
Città: Vivo in un mondo in cui tutti ti accusano e ti additano per un nonulla...
Messaggi: 9995
|
Grazie mille; sei stato chiarissimo!!
![]() Domanda: l'HAVING va quindi SOLO col GROUP BY in sostituzione del WHERE? Seconda domandina: nel secondo esempio (group by) se anzichè scrivere: select tipo,sum(prezzo) as totale from tabella group by tipo scrivessi: select tipo,sum(prezzo) as totale from tabella order by tipo Funzionerebbe ugualmente? Ultima modifica di PaVi90 : 19-06-2009 alle 15:51. |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Jul 2007
Messaggi: 1092
|
Quote:
id nome punteggio 1 nicola 10 2 nicola 2 3 andrea 4 4 andrea 3 5 giovanni 10 6 giovanni 10 Supponiamo tu voglia conoscere i nomi delle persone che hanno almeno un totale di 10 punti ma il cui nome sia solo nicola o andrea. In questo caso la tua query diventa Codice:
select nome,sum(punteggio) as totale
from tabella
where nome in ('andrea','nicola')
group by nome
having totale >= 10
In teoria potresti anche riscrivere la query così Codice:
select nome,sum(punteggio) as totale
from tabella
group by nome
having totale >= 10 and nome in ('andrea','nicola')
Spero di aver reso l'idea. |
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Jul 2007
Messaggi: 1092
|
Quote:
Potresti solo scrivere select sum(prezzo) as totale from tabella per ottenere il totale della tabella ma per raggruppare per nominativo è necessario usare il group by. Nessuno ti impedisce una volta effettuato il raggruppamento di ordinare come ti pare Codice:
select tipo,sum(prezzo) as totale from tabella group by tipo order by tipo |
|
|
|
|
|
|
#6 |
|
Bannato
Iscritto dal: May 2007
Città: Vivo in un mondo in cui tutti ti accusano e ti additano per un nonulla...
Messaggi: 9995
|
Ottimo, ora mi è chiarissimo. Grazie ancora!!
Magari il mio prof di informatica spiegasse come te... ora non mi ritroverei con il patema d'animo una settimana prima degli esami
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Jul 2007
Messaggi: 1092
|
Prego.... e in bocca al lupo per gli esami.
|
|
|
|
|
|
#8 |
|
Bannato
Iscritto dal: May 2007
Città: Vivo in un mondo in cui tutti ti accusano e ti additano per un nonulla...
Messaggi: 9995
|
Crepi!
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 23:52.





















