Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SUM()基于与选择不同的条件_Mysql_Sql - Fatal编程技术网

Mysql SUM()基于与选择不同的条件

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语句其余部分不同的条件进行求和(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 ...
 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