2

我将不胜感激以下方面的帮助

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错误。

Handicap 是添加到我的玩家表中的一个新字段,所以我认为我可以将那一点 sql 添加到我的原始字段中。

有什么想法吗?

谢谢dg

4

1 回答 1

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;
于 2013-01-15T14:29:38.443 回答