【问题标题】:SUM() based on a different condition to the SELECTSUM() 基于与 SELECT 不同的条件
【发布时间】:2011-12-01 02:20:25
【问题描述】:

嗨,有没有一种方法可以根据与 SELECT 语句的其余部分不同的条件来执行 SUM(total_points),所以我想要

非常感谢您的帮助。

SELECT
    members.member_id,
    members.teamname,
    SUM(total_points) as total_points,
    total_points as last_race_points 
FROM
    members,
    members_leagues,
    member_results 
WHERE
    members.member_id = members_leagues.member_id 
    AND members_leagues.league_id = '$chosenleague' 
    AND member_results.track_id = '$chosentrack' 
    AND members_leagues.start_race = '$chosentrack' 
    AND member_results.member_id = members_leagues.member_id
GROUP BY
    members.member_id 
ORDER BY
    member_results.total_points DESC,
    last_race_points DESC, 
    members.teamname DESC

【问题讨论】:

标签: mysql sql


【解决方案1】:

您还可以将总和放在 case 语句中,其中 case 评估另一个条件,然后仅对条件为真的那些记录求和...

  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  

【讨论】:

  • 但它仍然没有计算 members_results 表中 track_id 小于 $chosentrack 的所有行的总点数?它只计算等于 $chosentrack 的总点数?
  • 作为 [edited] 它应该计算 member_results.trackId 等于 $chosentrack 的所有行的总点数,以及 member_results.trackId 小于 $chosentrack 的所有行的总点数.我不得不删除 where 子句中的条件...
  • 谢谢老兄!你给我指出了正确的方向! :-)
【解决方案2】:
SELECT ... 
SUM(CASE
WHEN track_id <= [your_value] THEN total_points
ELSE 0
END
) AS total_points, .... 

【讨论】:

    【解决方案3】:

    将求和作为子选择进行,确保选择了附加列(不要忘记按该列分组)并使用公共字段将此子选择的结果连接到主查询。

    模板:

    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 ....
    

    【讨论】:

    • 对不起,所以我想要
    • 是的,它适用,它应该可以工作。这只是一种方法。起初我没有意识到您是从同一个表中选择列并应用单个条件,因此“案例”可能更具可读性,并且可能更容易被 RDBMS 优化。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-12
    • 1970-01-01
    • 2021-01-24
    • 1970-01-01
    • 2012-09-15
    • 2012-02-18
    相关资源
    最近更新 更多