SELECT
m.usr,
(m.money+sum(p.stake))
FROM
members m
inner join pools p on p.userid = m.id
inner join matches ma on ma.id = p.matchID
GROUP BY
1
ORDER BY
2 desc limit 0,5
Om det finns rader i tabellen "pools" som uppfyller villkoret vill jag ha ett villkor i WHERE-klausulen som lyder:
Om det inte finns några poster i pools som uppfyller villkoret så får du inget resultat alls så jag förstår inte vad du menar.
SELECT
m.usr,
m.money+sum(p.stake)
FROM
members m
inner join pools p on p.userid = m.id
inner join matches ma on ma.id = p.matchID
where ma.result is null
GROUP BY
m.usr,m.money
ORDER BY
2 desc limit 0,5
Jag vill addera två kolumner där ena kolumnen är m.money och den andra är summan av flera poster i kolumnen p.stake.
Jag vill endast beräkna summan av de poster där ma.result är NULL. (referens: ma.id = p.matchID )
Låt oss säga att en användare har ett högt värde i kolumnen m.money men inga poster i tabellen pools. Då kommer han/hon inte presenterats i resultatet i alla fall, fast jag vill det.
Då bör jag använda mig av left outer join kom jag på nu.
Sätter jag in left outer join istället och sätter in WHERE-klausulen får jag fortfarande samma resultat. Så vart ska man sätta in villkoret?
Då får jag ut summan av alla användarens poster i tabellen pools, även där result inte är NULL.
select
m.usr, (m.money+sum(p.stake))
from
members m
left outer join pools p on p.userid = m.id
left outer join matches ma on ma.id = p.matchID and isnull(ma.result)
group by
1
order by
2 desc limit 0,5
SELECT
m.usr,
m.money+
coalesce(sum(case when ma.result is null then p.stake
else 0 end),0)
FROM
members m
left join pools p on p.userid = m.id
left join matches ma on ma.id = p.matchID
GROUP BY
m.usr,m.money
ORDER BY
2 desc limit 0,5