-
SUM( ISNULL( x, 0 ) )
Ho un problema in questa query:
Codice:
SELECT player.id, palyer.name, player.money, SUM(ISNULL(stock.value,0)) + SUM(ISNULL(obj.value,0)) as "prova"
FROM `player`
left join trade on trade.owner= player.id
left join stock on trade.stock = stock.id
left join obj on obj.owner = player.id
group by player.id
MySQL said:
#1582 - Incorrect parameter count in the call to native function 'ISNULL'
dovrebbe sommare il valore delle azioni possedute da un giocatore (passando attraverso la tabella trade che dice chi possiede cosa) e il valore degli oggetti da lui posseduti. Se lascio le due SUM separate (una colonna ciascuna) queste funzionano, ma mi danno campi null se il giocatore non ha oggetti nè azioni. Unendole, dove uno dei campi è NULL nella somma ece, giustamente, NULL. Ho cercato su internet e mi dice di usare ISNULL(valoredacontrollare, 0) per fare uscire lo zeero invece del null e poter così fare la somma. MYSQL però non è d'accordo. Che ne dite? Che faccio?
-
Credo che non sia la funzione che ti serva, ISNULL() vuole un solo argomento e restituisce 1 se questo è NULL, 0 in caso contrario (vedi qui: http://dev.mysql.com/doc/refman/4.1/...unction_isnull)
Quella che ti serve molto probabilmente è IFNULL() (vedi: http://dev.mysql.com/doc/refman/4.1/...unction_ifnull). Questa accetta due argomenti, e restituisce il primo se non è NULL, oppure il secondo se il primo è NULL.
Stammi bene...
-
Ecco, ora va :)
Grazie mille.
-
altro problema sulla stessa query... la somma degli oggetti ora esce moltilicata per il numero di azioni... O.o
-
Hai provato ad usare solamente le SUM()? Dovrebbero ignorare i valori NULL nella somma, restituendo NULL solamente quando non ci sono termini da sommare. (vedi: http://dev.mysql.com/doc/refman/4.1/...functions.html)
Se devi collegare le due somme, potresti tentare questa soluzione: IFNULL(SUM(stock.value), 0) + IFNULL(SUM(obj.value), 0)
Stammi bene...