SUM () на основе другого условия для SELECT - PullRequest
9 голосов
/ 05 октября 2011

Привет, есть ли способ, которым я могу сделать SUM (total_points) на основе условия, отличного от остальной части инструкции 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

Ответы [ 3 ]

25 голосов
/ 05 октября 2011

Вы также можете поместить сумму в инструкцию 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  
3 голосов
/ 05 октября 2011
SELECT ... 
SUM(CASE
WHEN track_id <= [your_value] THEN total_points
ELSE 0
END
) AS total_points, .... 
1 голос
/ 05 октября 2011

Сделайте сумму как подвыбор, убедившись, что вы выбрали дополнительный столбец (не забудьте сгруппировать по этому столбцу) и присоедините результат этого отборного этапа к основному запросу, используя общее поле.

Шаблон:

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 ....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...