2013-01-15 53 views
2

后,我将不胜感激一些帮助,下面SQL errror增加额外的选择

SELECT distinct playerid as le_player, 
    (select sum(score) from playerresults where playerid = le_player) as wins, 
    (select handicap from players where playerid = le_player) as handicap, playername, 
    (select count(playerid)*3 from playerresults where playerid = le_player)as totalgames, 
    (select count(playerid)*3 from playerresults where playerid = le_player) - (select sum(score) from playerresults where playerid = le_player)as lost, 
    round((select sum(score) from playerresults where playerid = le_player)/(select count(playerid)*3 from playerresults where playerid = le_player) * 100,2) as percent, 
    teams.team_name 
FROM playerresults 
    INNER JOIN teams on (select players.team_id from players where players.id = playerid) = teams.id 
WHERE playerresults.season = 2012 AND playerresults.league = 4 
ORDER BY wins desc,totalgames asc 

这是工作,直到我说下面一行:

(select handicap from players where playerid = le_player) as handicap 

现在,这产生了Subquery returns more than 1 row错误。

障碍是一个新的领域添加到我的球员表,所以我想我可以只添加这一点的SQL到我的原始。

有什么想法?

感谢 DG

+4

@juergend你认为你可以帮助他们吗? –

回答

5

你可能要考虑使用与表,而不是所有的相关子查询的联接:

SELECT playerid as le_player, 
    sum(pr.score) as wins, 
    p.handicap, 
    pr.playername, 
    count(pr.playerid)*3 as totalgames, 
    count(pr.playerid)*3 - sum(pr.score) as lost, 
    round(sum(pr.score)/(count(pr.playerid)*3) * 100,2) as percent, 
    t.team_name 
from playerresults pr 
left join players p 
    on pr.playerid = p.id 
left join teams t 
    on p.team_id = teams.id 
where pr.season = 2012 
    AND pr.league = 4 
group by pr.playerid 
ORDER BY wins desc, totalgames asc; 

甚至是这样的:

SELECT pr.playerid as le_player, 
    Score as wins, 
    p.handicap, 
    pr.playername, 
    CountPlayerId*3 as totalgames, 
    CountPlayerId*3 - Score as lost, 
    round(Score/(CountPlayerId*3) * 100,2) as percent, 
    t.team_name 
from 
(
    select playerid, 
     sum(pr.score) Score, 
     count(pr.playerid) CountPlayerId 
    from playerresults 
    WHERE season = 2012 
     AND league = 4 
    group by playerid 
) pr 
left join players p 
    on pr.playerid = p.id 
left join teams t 
    on p.team_id = teams.id 
where pr.season = 2012 
    AND pr.league = 4 
ORDER BY wins desc, totalgames asc; 
+0

哇,这是做的伎俩。非常感谢。 – user1980578

+1

@ user1980578 - 尝试[**接受**](http://meta.stackexchange.com/questions/16721/how-does-accept-rate-work)答案,通过检查它的左边的标记。这是怎么东西在这里工作。 –

+0

明白了,谢谢。 – user1980578