In the last episode (Apr 20), Peter Lauri said:
> Best groupmember,
> 
> I am doing this query that works fine. 
> 
> SELECT 
>    tps.tour_player_id,   
>    sum(if(tsh.hole_number<=9, tps.strokes, '0')) AS 'front_9', 
>    sum(if(tsh.hole_number>=10, tps.strokes, '0')) AS 'back_9', 
>    sum(tps.strokes) AS 'score'
> FROM tour_player_score tps
> INNER JOIN tour_scorecard_hole tsh ON tps.scorecard_hole_id=tsh.id
> GROUP BY tps.tour_player_id 
> ORDER BY 
>    score, 
>    back_9;
> 
> However, I would like to just get the result where sum(tps.strokes)<90, so I
> added WHERE sum(tps.strokes)<90 after the inner join like this
> 
> SELECT 
>    tps.tour_player_id,   
>    sum(if(tsh.hole_number<=9, tps.strokes, '0')) AS 'front_9', 
>    sum(if(tsh.hole_number>=10, tps.strokes, '0')) AS 'back_9', 
>    sum(tps.strokes) AS 'score'
> FROM tour_player_score tps
> INNER JOIN tour_scorecard_hole tsh ON tps.scorecard_hole_id=tsh.id
> WHERE sum(tps.strokes) < 90
> GROUP BY tps.tour_player_id 
> ORDER BY 
>    score, 
>    back_9;

It's useful to note that SELECT statements generally work in the order
they are written.  The WHERE clause applies to the records as they are
read from the source tables, and at that point, no grouping has been
done, so there's no sum.  Try moving your filter to a HAVING clause,
which comes between GROUP BY and HAVING, and applies to the final
resultset of the table (and at that point, you do have a
sum(tps.strokes) column).
 
-- 
        Dan Nelson
        [EMAIL PROTECTED]

-- 
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to