/ / MySQL Perché sommare automaticamente quando si utilizza la funzione di aggregazione - mysql, sql, funzioni di aggregazione

MySQL Perché sommare automaticamente quando si utilizza la funzione di aggregazione - mysql, sql, funzioni di aggregazione

Sto cercando di scrivere una query MySQL che calcoli la deviazione standard di una colonna numerica senza utilizzare STD (). La mia query di lavoro è la seguente:

SELECT sqrt(power((amount-avg(amount)),2)/count(amount))
FROM Orders;

Si prega di trattare "importo" come il nome della colonna e"Ordini" come nome della tabella. La mia domanda è perché c'è una somma automatica di tutti i risultati di potere ((amount-avg (importo)), 2) senza usare una funzione somma?

Grazie!

risposte:

1 per risposta № 1

Stai usando la funzione count (), che è unfunzione di aggregazione, quindi ottieni tutte le righe raggruppate. Nella tua query, l'importo non è calcolato come somma, utilizza solo il valore di una riga SOME (non è determinato quale sia il valore della riga utilizzato), poiché MySQL consente di utilizzare colonne non raggruppate combinate con quelle raggruppate.

Leggi di più qui: https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html

Se desideri implementarlo solo da te, puoi provare una query come questa:

SELECT @avg:=(SELECT avg(amount) FROM Orders), @cnt:=(SELECT count(*) FROM Orders),
SQRT(SUM(POWER(amount-@avg,2)/@cnt)) as std
FROM Orders

Questo farà sì che due query veloci diventino medie e contino una sola volta (poiché queste sono sempre le stesse per ogni riga) e quindi sommerà la tua formula e restituirà sqrt come std.


-1 per risposta № 2

Il tuo amount la colonna non calcola la somma. È il valore della riga di SOME della tua tabella.