BASI DI DATI -SQL

marktrix
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...

Risposte
codino75
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?

codino75
"marktrix":

GROUP BY Cliente.Nr.telefono,Cliente.Nome


una osservazione:
a che serve Cliente.Nome dentro la GROUP BY?

marktrix
li ordina in base al nome,quello è un dettaglio estetico...ero solo indeciso sulla struttura della query..

codino75
sei sicuro che il COUNT conta solo i valori diversi fra loro?

marktrix
il count conta le righe che hanno le caratteristiche che cerchi

codino75
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.

marktrix
quindi tu suggerisci un COUNT DISTINCT?

codino75
si', credo che ci voglia.

il count agisce separatamente sui singoli gruppi, e' vero?

marktrix
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(*)

marktrix
è giusto! il distinct non andrebbe perchè sono valide anche gli ordini fatti allo stesso operatore..è giusto così.. :-)

codino75
"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 '
?

marktrix
allora hai ragione te.. :-D è vero.. è come avevo scritto ma con COUNT DISTINCT

codino75
ok alla prox

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.