MySql:Eseguire somme o altre operazioni su più record (totale, media, ...)
Operazioni
- SUM: somma (http://www.tizag.com/mysqlTutorial/mysqlsum.php);
- MIN: valore minimo (http://www.tizag.com/mysqlTutorial/mysqlmin.php);
- MAX: valore massimo (http://www.tizag.com/mysqlTutorial/mysqlmax.php);
- AVG: valore medio (http://www.tizag.com/mysqlTutorial/mysqlavg.php);
- ...
Utilizzo
L'operazione da eseguire viene inserita come un campo della SELECT:
SUM( total_points ) as totale
Se si vuole inserire una condizione per la quale includere o meno un valore:
Sum(Case When r.track_Id = 0 Then total_points End) as TotalChosenTrackPoints
oppure
Sum(Case When r.track_Id = 0 Then total_points Else 0 End) as TotalChosenTrackPoints
Queste condizioni vanno entrambe bene ma attenzione che in un caso verrà inserito il valore solo se la condizione è vera, nell'altro si viene inserito solo se la condizione è vera, ma nel caso fosse falsa viene inserito uno 0, che potrebbe interferire con i calcoli, ad esempio con la media, valore minimo, etc...
Solitamente la clausola WHERE dell'istruzione è seguita dall'opzione GROUP <campo> che raccoglie i valori in gruppi secondo il valore del <campo>.
sum() of column by distinct() id column
fonte: https://dba.stackexchange.com/questions/184312/sum-of-column-by-distinct-id-column
SUM(leads.source_cost) * COUNT(DISTINCT leads.id) / COUNT(*)
Esempio
fonte http://stackoverflow.com/questions/7655219/sum-based-on-a-different-condition-to-the-select
SELECT m.member_id, m.teamname, Sum(Case When r.track_Id = '$chosentrack' Then total_points Else 0 End) as TotalChosenTrackPoints, Sum(Case When r.track_Id < '$chosentrack' Then total_points Else 0 End) as TotalLessThanChosenTrackPoints, total_points as last_race_points FROM members m Join members_leagues l On l.member_id = m.member_id Join member_results r On r.member_id = m.member_id Where l.league_id = '$chosenleague' And l.start_race = '$chosentrack' Group By m.member_id Order By r.total_points Desc, last_race_points Desc, m.TeamName Desc