Mysql SUM()基于与选择不同的条件
您好,有没有一种方法可以根据与SELECT语句其余部分不同的条件进行求和(total_points),因此我希望将的每一行的求和(total_points)作为子选择进行求和,确保您选择了一个额外的列(别忘了按该列分组)并使用公共字段将此子选择的结果连接到主查询 模板:Mysql SUM()基于与选择不同的条件,mysql,sql,Mysql,Sql,您好,有没有一种方法可以根据与SELECT语句其余部分不同的条件进行求和(total_points),因此我希望将的每一行的求和(total_points)作为子选择进行求和,确保您选择了一个额外的列(别忘了按该列分组)并使用公共字段将此子选择的结果连接到主查询 模板: Select col1, col2 as t,x.thesum From table t left join ( select sum(colx) as thesum, col1 from t where ... Grou
Select col1,
col2 as t,x.thesum
From table t left join
( select sum(colx) as thesum, col1 from t where ...
Group by col1) x on t.col1=x.col1
Where ....
选择。。。
总数(例)
当track_id时,您还可以将sum放入case语句中,case在其中计算其他条件,然后仅sum thos记录条件为true的情况
SELECT m.member_id, m.teamname,
Sum(Case When r.track_Id = '$chosentrack'
Then total_points Else 0 End) TotalChosenTrackPoints,
Sum(Case When r.track_Id < '$chosentrack'
Then total_points Else 0 End) 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
选择m.member\u id、m.teamname、,
总和(r.track_Id=“$chosentrack”时的情况)
然后是总分(其他0个结束)总分,
总和(r.track_Id<'$chosentrack'时的情况)
然后总积分(否则0结束)总积分超过ChosentRackpoints,
最后一场比赛的总积分
m成员
加入联盟成员
在l.member\u id=m.member\u id上
加入成员\u结果r
在r.member\u id=m.member\u id上
其中l.league_id=“$chosenleague”
l.start_race=“$chosentrack”
按m.member\u id分组
按r.total_points Desc排序,
最后一场比赛分数说明,m.TeamName说明
很抱歉,我想要总数(总分)对于每一行是的,它都适用,并且应该有效。这只是一种方法。起初我没有意识到您是从同一个表中选择列并应用单个条件,因此“case”可能更可读,并且可能更容易通过RDBMS进行优化。但它仍然没有计算所有行的总点数members_results table中的e track_id小于$chosentrack?其仅计算等于$chosentrack?时的总积分[编辑]它应该计算member_results.trackId等于$chosentrack的所有行的总分,以及member_results.trackId小于$chosentrack的所有行的总分。我必须删除where子句中的条件…谢谢,伙计!你给我指出了正确的方向!:-)可能是@Athafoud的复制品你真的在挖东西。给人印象深刻的
SELECT ...
SUM(CASE
WHEN track_id <= [your_value] THEN total_points
ELSE 0
END
) AS total_points, ....
SELECT m.member_id, m.teamname,
Sum(Case When r.track_Id = '$chosentrack'
Then total_points Else 0 End) TotalChosenTrackPoints,
Sum(Case When r.track_Id < '$chosentrack'
Then total_points Else 0 End) 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