- Home
- Categorie
- Coding e Sistemistica
- MYSQL e altri Database
- Select MySQL con JOINT e somma di valori
-
Select MySQL con JOINT e somma di valori
Salve ragazzi,
sono alle prese con una query abbastanza complessa, che non riesco a smatassare.
La abbrevio per semplicità, lasciando solo i campi essenziali delle tabelle:
"SELECT utenti.id, utenti.cognome, ordini.id_cliente, ordini.totale as totale FROM utenti LEFT JOIN ordini ON utenti.id=ordini.id_cliente WHERE utenti.id >10 ORDER BY totale DESC LIMIT 0,20"
Ora, questa query funziona benissimo, solo che per ogni utente, mi restituisce tanti valori quanti sono quelli contenuti nella tabella ordini.
Ho invece la necessità di sommare i valori del campo ordini.totale relativi a ciascun utente, affinchè ad ogni utente corrisponda una sola riga restituita.Certo, potrei anche calcolare dopo la somma, ma, per ragioni che non mi dilungo a spiegare, questo non mi è consentito e vorrei riuscire a farlo tramite la funzione SUM(), che però non sembra funzionare.
Mi sapete spiegare il perchè?
-
Ciao kru
Non ne sono sicurissimo ma credo che dovresti modificarla così
"SELECT utenti.id, utenti.cognome, ordini.id_cliente, SUM(ordini.totale) as totale FROM utenti LEFT JOIN ordini ON utenti.id=ordini.id_cliente WHERE utenti.id >10 ORDER BY totale DESC LIMIT 0,20"
Facci sapere se funziona
-
Ciao Samiorn,
anzitutto grazie per la gentile risposta.
Non ti nascondo che quando accennavo al fatto di aver tentato l'utilizzo si SUM() senza successo è proprio questo metodo che ho utilizzatoHo ritentato nuovamente, dato che ho avuto la conferma di non aver poi sbagliato più di tanto, ed anche adesso non funziona, purtroppo.
Però, questa volta ho modificato la mia query inserendo la restituzione dell'errore e questo è il risultato:
Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
Ora, è evidente che l'utilizzo di SUM() preveda obbligatoriamente anche la clausola group by. Quindi è questa, alla fin fine, che mi raggruppa i risultati in uno solo.
Mi sai dire come va inserita all'interno della mia query?
Grazie ancora
-
Ecco perché ero in dubbio
mi suonava strano...sentivo che qualcosa non andava"SELECT utenti.id, utenti.cognome, ordini.id_cliente, SUM(ordini.totale) as totale FROM utenti LEFT JOIN ordini ON utenti.id=ordini.id_cliente WHERE utenti.id >10 GROUP BY utenti.id ORDER BY totale DESC LIMIT 0,20" ```giustamente lui la somma te la fa....ma secondo quale metodo di aggregazione?? Scusami, non la uso da tanto e quindi mi era passato di mente ;) Attendiamo buone news :D P.S. mi viene solo il dubbio che forse invece di utenti.id dovresti mettere ordini.id_cliente, prova un po' ;)
-
No, Samyorrn, la prima risposta è quella che conta.
Si dice così e forse è vero... funzionaGrazie mille per l'aiuto
-
Di nulla, alla prossima