Denna kod bör om allt funkar som det ska summera raderna i ursprungsfrågan och lägga summorna i en rad i botten. Koden bör funka, men det går säkert att göra snyggare, och i så fall kommer LarsG med stor sannolikhet visa hur. §e
Grundidén i min kod är att man först hämtar ursprungsfrågan som en subquery, och gör en UNION ALL för att få en tom rad i botten. Sedan använder man ett antal variabler som räknare. I den yttre selecten returneras alltid det riktiga värdet förutom om lastrow är sant (vilket det är för den sista, tomma raden), då visas summan.
SET @counter_antal := 0,
@counter_vinst := 0,
@counter_andra := 0,
@counter_tredje := 0,
@counter_fyra := 0,
@counter_femte := 0,
@counter_pris := 0,
@counter_skr := 0;
SELECT
if(t1.lastrow, @counter_antal, t1.antal) AS antal,
if(t1.lastrow, @counter_vinst, t1.vinst) AS vinst,
if(t1.lastrow, @counter_andra, t1.andra) AS andra,
if(t1.lastrow, @counter_tredje, t1.tredje) AS tredje,
if(t1.lastrow, @counter_fyre, t1.fyra) AS fyra,
if(t1.lastrow, @counter_femte, t1.femte) AS femte,
if(t1.lastrow, @counter_pris, t1.pris) AS pris,
if(t1.lastrow, @counter_skr, t1.skr) AS skr,
@counter_antal := @counter_antal + t1.antal,
@counter_vinst := @counter_vinst + t1.vinst,
@counter_andra := @counter_andra + t1.andra,
@counter_tredje := @counter_tredje + t1.tredje,
@counter_fyra := @counter_fyra + t1.fyra,
@counter_femte := @counter_femte + t1.femte,
@counter_pris := @counter_pris + t1.pris,
@counter_skr := @counter_skr + t1.skr
FROM
(
SELECT count( loppID ) AS antal,
sum( if( placering = '1', 1, 0 ) ) AS vinst,
sum( if( placering = '2', 1, 0 ) ) AS andra,
sum( if( placering = '3', 1, 0 ) ) AS tredje,
sum( if( placering = '4', 1, 0 ) ) AS fyra,
sum( if( placering = '5', 1, 0 ) ) AS femte,
sum( summa ) AS pris,
sum( summa ) * 1.4584 AS skr,
ban_name,
0 AS lastrow
FROM start s
JOIN bana b ON b.banID = s.banID
WHERE kuskID =1
AND problemID <9
AND datum >= '2009-01-01'
GROUP BY s.banID
ORDER BY ban_name
UNION ALL
/* Dummy-rad som ersätts med summan (UNION fogar samman resultaten) */
SELECT
0 AS antal,
0 AS vinst,
0 AS andra,
0 AS tredje,
0 AS fyra,
0 femte,
0 AS pris,
0 AS skr,
'SUMMA' AS ban_name,
1 AS lastrow
) t1