BASI DI DATI -SQL
da questo esempio:
CLIENTE(Nr.telefono ,Nome,Indirizzo)
ORDINE(Nr.telefono,codice-pizza,codice-operatore,data ,costo)
PIZZA(codice-pizza ,nome,prezzo)
e mi chiede:
Determina il nome dei clienti che hanno ordinato pizze ad almeno 2 operatori diversi
e' giusto fare così?
SELECT Cliente.Nome, COUNT(Ordine.Codice-operatore)
FROM Cliente,Ordine
WHERE Cliente.Nr.telefono=Ordine.Nr.telefono
GROUP BY Cliente.Nr.telefono,Cliente.Nome
HAVING COUNT(Ordine.Codice-operatore)>1
non voglio farla con query nidificata...
CLIENTE(Nr.telefono ,Nome,Indirizzo)
ORDINE(Nr.telefono,codice-pizza,codice-operatore,data ,costo)
PIZZA(codice-pizza ,nome,prezzo)
e mi chiede:
Determina il nome dei clienti che hanno ordinato pizze ad almeno 2 operatori diversi
e' giusto fare così?
SELECT Cliente.Nome, COUNT(Ordine.Codice-operatore)
FROM Cliente,Ordine
WHERE Cliente.Nr.telefono=Ordine.Nr.telefono
GROUP BY Cliente.Nr.telefono,Cliente.Nome
HAVING COUNT(Ordine.Codice-operatore)>1
non voglio farla con query nidificata...
Risposte
non so darti la risposta...
mi viene pero' il dubbio che forse con la query che hai scritto trovi anche quelli che hanno fatto 2 ordini allo stesso operatore?
mi viene pero' il dubbio che forse con la query che hai scritto trovi anche quelli che hanno fatto 2 ordini allo stesso operatore?
"marktrix":
GROUP BY Cliente.Nr.telefono,Cliente.Nome
una osservazione:
a che serve Cliente.Nome dentro la GROUP BY?
li ordina in base al nome,quello è un dettaglio estetico...ero solo indeciso sulla struttura della query..
sei sicuro che il COUNT conta solo i valori diversi fra loro?
il count conta le righe che hanno le caratteristiche che cerchi
scusami se insisto a discutere anche se non so dare una risposta precisa al tuo post, ma l'sql lo studiai tempo fa ed ora sono un po ' arrugginito..
non capisco come farebbe il count a distinguere tra due righe con lo stesso operatore e due righe con operatore diverso.
non capisco come farebbe il count a distinguere tra due righe con lo stesso operatore e due righe con operatore diverso.
quindi tu suggerisci un COUNT DISTINCT?
si', credo che ci voglia.
il count agisce separatamente sui singoli gruppi, e' vero?
il count agisce separatamente sui singoli gruppi, e' vero?
ho trovato un esempio proprio ora fatto dal docente
RUOLO(Id,nome,descrizione )
GRUPPO(Id,nome,finanziamento)
PERSONA(Id,nome,cognome,ruolo)
APPARTENENZA(Id_persona,Id_gruppo)
calcolare alfabeticamente id,nome e cognome delle persone che appartengono ad almeno 2 gruppi
SELECT persona.id,persona.nome,persona.cognome COUNT(*) AS numerogruppi
FROM persona,appartenenza
WHERE persona.id=appartenenza.id_persona
GROUP BY persona.id,persona.nome,persona.cognome
HAVING COUNT(*)>1
non si discosta da quello che ho fatto io..tranne che per il count che fa un count(*)
RUOLO(Id,nome,descrizione )
GRUPPO(Id,nome,finanziamento)
PERSONA(Id,nome,cognome,ruolo)
APPARTENENZA(Id_persona,Id_gruppo)
calcolare alfabeticamente id,nome e cognome delle persone che appartengono ad almeno 2 gruppi
SELECT persona.id,persona.nome,persona.cognome COUNT(*) AS numerogruppi
FROM persona,appartenenza
WHERE persona.id=appartenenza.id_persona
GROUP BY persona.id,persona.nome,persona.cognome
HAVING COUNT(*)>1
non si discosta da quello che ho fatto io..tranne che per il count che fa un count(*)
è giusto! il distinct non andrebbe perchè sono valide anche gli ordini fatti allo stesso operatore..è giusto così..

"marktrix":
è giusto! il distinct non andrebbe perchè sono valide anche gli ordini fatti allo stesso operatore..è giusto così..
scusa ma il testo diceva espressamente
' Determina il nome dei clienti che hanno ordinato pizze ad almeno 2 operatori diversi '
?
allora hai ragione te..
è vero.. è come avevo scritto ma con COUNT DISTINCT

ok alla prox