添加额外选择后sql错误

时间:2013-01-15 14:22:10

标签: mysql sql

我将非常感谢以下

的帮助
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添加到我的原始文件中。

有什么想法吗?

由于 分克

1 个答案:

答案 0 :(得分: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;