|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Oct 2004
Città: Rossano Veneto
Messaggi: 110
|
[SQL]Errore in una query con GROUP BY
Il DB è composto da tre tabelle:
Ordine(td,nome,posti,data),Piatti(id,descrizione),Portate(id,descrizione) e da una tabella di appoggio Dettagli(idOrd,idPiatto,idPortata). La query è la seguente: SELECT Ordine.nome, SUM(Ordine.posti), Piatti.descrizione, Portate.descrizione FROM 'le quattro tabelle unite col INNER JOIN sul codice' WHERE Ordine.data=<input> GROUP BY portate.descrizione,piatti.descrizione Ma mi da questo errore: [Microsoft][ODBC SQL Server Driver][SQL Server]La colonna 'ordini.nome' non è valida nell'elenco di selezione perché non è inclusa né in una funzione di aggregazione né nella clausola GROUP BY. Come risolvo il mio problema?
__________________
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 1999
Città: Sesto Fiorentino, Firenze
Messaggi: 8444
|
Hai messo una funzione di aggregazione sulla select
Codice:
SELECT Ordine.nome, SUM(Ordine.posti), Piatti.descrizione, Portate.descrizione devi mettere gli altri tre campi, altrimenti ti da errore Codice:
GROUP BY Ordine.nome, Piatti.descrizione, Portate.descrizione |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Oct 2004
Città: Rossano Veneto
Messaggi: 110
|
Non posso fare così perchè ho bisogno della somma di tutti gli ordini che hanno quel piatto in quella portata.
Questo non è un problema perchè la somma la potrei farla dopo però nemmeno la query Codice:
SELECT Ordine.nome, Ordine.posti, Piatti.descrizione, Portate.descrizione FROM 'le quattro tabelle unite col INNER JOIN sul codice' WHERE Ordine.data=<input> GROUP BY portate.descrizione,piatti.descrizione
__________________
|
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Oct 2004
Città: Rossano Veneto
Messaggi: 110
|
Errata corrige:
leggendo una dispensa mi sono ricordato che con il GROUP BY si una HAVING quindi: Codice:
SELECT Ordine.nome, Ordine.posti, Piatti.descrizione, Portate.descrizione FROM 'le quattro tabelle unite col INNER JOIN sul codice' GROUP BY portate.descrizione,piatti.descrizione HAVING Ordine.data=<input>
__________________
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Nov 1999
Città: Sesto Fiorentino, Firenze
Messaggi: 8444
|
Quote:
|
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Nov 2001
Città: 100 metri dal mare
Messaggi: 4855
|
Prova cosi'
Quote:
|
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Nov 1999
Città: Sesto Fiorentino, Firenze
Messaggi: 8444
|
Quote:
Ordine.nome cos'è? Nella tabella ordini cosa c'è? |
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Nov 2001
Città: 100 metri dal mare
Messaggi: 4855
|
Hai ragione, mi sono limitato a leggere l'ultima query ( dove non c'era traccia del sum ).. cmq ci sarebbe da vedere come e' struturato il DB per capire cosa serve e cosa fare..
Ciao ! |
|
|
|
|
|
#10 | |
|
Member
Iscritto dal: Oct 2004
Città: Rossano Veneto
Messaggi: 110
|
Quote:
posso rinunciare alla somma ma questa dovrebbe funzionare Codice:
SELECT Ordine.nome, Ordine.posti, Piatti.descrizione, Portate.descrizione FROM 'le quattro tabelle unite col INNER JOIN sul codice' GROUP BY portate.descrizione,piatti.descrizione HAVING Ordine.data=<input>
__________________
|
|
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Nov 1999
Città: Sesto Fiorentino, Firenze
Messaggi: 8444
|
Quote:
A leggere la prima query che ha scritto la soluzione è non mettere Ordine.nome nell'elenco della select, ma bisogna vedere se gli serve o meno quella colonna... |
|
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: Nov 1999
Città: Sesto Fiorentino, Firenze
Messaggi: 8444
|
Quote:
C'è un errore di fondo, così non ti funzionerà mai, le colonne che specifichi nella clausola select le devi mettere anche nella group by a meno che non sia usate, nella select stessa, in funzioni di aggregazione ([i]SUM, COUNT, AVG ecc) |
|
|
|
|
|
|
#13 | ||
|
Senior Member
Iscritto dal: Nov 2001
Città: 100 metri dal mare
Messaggi: 4855
|
Quote:
Quote:
|
||
|
|
|
|
|
#14 |
|
Member
Iscritto dal: Oct 2004
Città: Rossano Veneto
Messaggi: 110
|
Non posso usare usare funzioni di aggregazione, togliere il nome o includerlo nel group by.
Mi dovro inventare qualcosa costituito da più query.
__________________
|
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Nov 2001
Città: 100 metri dal mare
Messaggi: 4855
|
Esegui la query che ti ho scritto e vediamo se funziona
Tanto hai detto il SUM lo recuperi da altre parti.. Ciao ! |
|
|
|
|
|
#16 | |
|
Senior Member
Iscritto dal: Nov 1999
Città: Sesto Fiorentino, Firenze
Messaggi: 8444
|
Quote:
Si con la distinct funziona, ed anche con la group by, solo che dopo non è possible usare ordine.posti per sommare, perchè i valori duplicati sono stati eliminati dalla distinct o raggruppati dalla group by IMHO la query giusta è Codice:
SELECT SUM(Ordine.posti), Piatti.descrizione, Portate.descrizione FROM 'le quattro tabelle unite col INNER JOIN sul codice' WHERE Ordine.data=<input> GROUP BY portate.descrizione,piatti.descrizione |
|
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: Nov 1999
Città: Sesto Fiorentino, Firenze
Messaggi: 8444
|
Scusa ma nella tabella ordine cosa c'è dentro?
Codice:
Tabella Ordine id = chiave tabella? nome = ??? posti = numero di portate ordinate? data = data ordine Spiegami un po', perchè altrimenti mi riesce difficile cosa c'è dentro |
|
|
|
|
|
#18 |
|
Senior Member
Iscritto dal: Nov 2001
Città: 100 metri dal mare
Messaggi: 4855
|
In effetti quell'ordine.nome e' strano, la mia "preoccupazione" e' che sia strutturato male il DB, perche' se il group by va utilizzato in una certe maniera c'e' un motivo..
Ciao ! |
|
|
|
|
|
#19 | |
|
Senior Member
Iscritto dal: Nov 1999
Città: Sesto Fiorentino, Firenze
Messaggi: 8444
|
Quote:
Infatti è anche la mia paura, se devi sommare Ordine.posti, se il DB è corretto i casi sono due
|
|
|
|
|
|
|
#20 |
|
Member
Iscritto dal: Oct 2004
Città: Rossano Veneto
Messaggi: 110
|
Allora
tabella ordini: nome: chi ha fatto l'ordine posti: per quante persone data: per quando ha prenotato A me serve sapere per quante persone e in quali ordini serve un piatto di un dato giorno. Codice:
SELECT Ordine.nome, Ordine.posti, Piatti.descrizione, Portate.descrizione FROM 'le quattro tabelle unite col INNER JOIN sul codice' GROUP BY portate.descrizione,piatti.descrizione HAVING Ordine.data=<input> Sono uno studente e questo è il primo DB serio che faccio quindi è possibile che sia fatto male daltronde lo rifatto solo 2 volte.
__________________
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 07:41.



















