MySql:Eseguire somme o altre operazioni su più record (totale, media, ...)

← Torna a MySQL

Operazioni

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