2015-02-07 87 views
0

这是我的选择查询减去在MySQL列

Select 
    snpc_stats.gamedetail.Player, 
    Sum(snpc_stats.gamedetail.Points + snpc_stats.gamedetail.Hits) As TotalPoints, 
    COUNT(*) As 'Games Played', 
    Sum(If(snpc_stats.gamedetail.Finish = 1, 1, 0)) As Wins, 
    Sum(If(snpc_stats.gamedetail.Finish = 2, 1, 0)) As Second, 
    Sum(If(snpc_stats.gamedetail.Finish = 3, 1, 0)) As Third, 
    Round(Avg(snpc_stats.gamedetail.Finish),2) As 'Average Finish', 
    Sum(snpc_stats.gamedetail.Hits) As `Total Hits`, 
    Sum(snpc_stats.gamedetail.ChampFund) As ChampFund, 
    Sum(snpc_stats.games.BuyIn) + (snpc_stats.gamedetail.ChampFund) As Cost, 
    Sum(snpc_stats.gamedetail.Winnings) As Winnings, 
    Sum(snpc_stats.gamedetail.Winnings) - (snpc_stats.games.BuyIn) - (snpc_stats.gamedetail.ChampFund) As 'Total Winnings', 
    COUNT(snpc_stats.games.Round) As round 

From 
    snpc_stats.gamedetail Inner Join 
    snpc_stats.games On snpc_stats.games.GameID = 
    snpc_stats.gamedetail.GamesID 

Where 
    snpc_stats.games.Season = '2015 Season' 

Group By 
    snpc_stats.gamedetail.Player, snpc_stats.games.Season 

Order By 
    TotalPoints Desc 

的TotalPoints列后,我想补充一点显示每个玩家的小径背后的点量一列所有从第一行的值的行领导者,如下表:

Rank | Player | Total Points | Points Behind 
1  Bill  164   - 
2  Al  152   -12 
3  Ed  151   -13 
4  Jill  123   -41 
5  Bob  121   -43 
6  Joe  102   -62 
7  Dave  82   -82 
8  Rob   60   -104 
9  Doug  60   -104 
10  Don   51   -113 
11  Dan   30   -134 

任何帮助将不胜感激!

回答

1

溶液(1)
如果您正在使用连接到数据库并运行查询,你可以在某些变量保持第一行的总分值的服务器端语言,并从它
减去以下所有行
溶液(2)
使一个子查询,返回第一行的总积分,并在查询

Select 
 
    snpc_stats.gamedetail.Player, 
 
    Sum(snpc_stats.gamedetail.Points + snpc_stats.gamedetail.Hits) As TotalPoints, 
 
    (Sum(snpc_stats.gamedetail.Points + snpc_stats.gamedetail.Hits) - (Select Sum(snpc_stats.gamedetail.Points + snpc_stats.gamedetail.Hits) From snpc_stats.gamedetail Inner Join snpc_stats.games On snpc_stats.games.GameID = snpc_stats.gamedetail.GamesID Where snpc_stats.games.Season = '2015 Season' Group By snpc_stats.gamedetail.Player, snpc_stats.games.Seaso Order By Sum(snpc_stats.gamedetail.Points + snpc_stats.gamedetail.Hits) Desc Limit 1)) As Points Behind, 
 
    COUNT(*) As 'Games Played', 
 
    Sum(If(snpc_stats.gamedetail.Finish = 1, 1, 0)) As Wins, 
 
    Sum(If(snpc_stats.gamedetail.Finish = 2, 1, 0)) As Second, 
 
    Sum(If(snpc_stats.gamedetail.Finish = 3, 1, 0)) As Third, 
 
    Round(Avg(snpc_stats.gamedetail.Finish),2) As 'Average Finish', 
 
    Sum(snpc_stats.gamedetail.Hits) As `Total Hits`, 
 
    Sum(snpc_stats.gamedetail.ChampFund) As ChampFund, 
 
    Sum(snpc_stats.games.BuyIn) + (snpc_stats.gamedetail.ChampFund) As Cost, 
 
    Sum(snpc_stats.gamedetail.Winnings) As Winnings, 
 
    Sum(snpc_stats.gamedetail.Winnings) - (snpc_stats.games.BuyIn) - (snpc_stats.gamedetail.ChampFund) As 'Total Winnings', 
 
    COUNT(snpc_stats.games.Round) As round 
 
From 
 
    snpc_stats.gamedetail Inner Join 
 
    snpc_stats.games On snpc_stats.games.GameID = 
 
    snpc_stats.gamedetail.GamesID 
 
Where 
 
    snpc_stats.games.Season = '2015 Season' 
 
Group By 
 
    snpc_stats.gamedetail.Player, snpc_stats.games.Season 
 
Order By 
 
    TotalPoints Desc

的选择部使用它
+0

当我使用你的select语句时,我得到“Reference'TotalPoints'不被支持(参考组函数)” – bech64 2015-02-07 22:31:48

+0

我编辑了答案,再次检查它! – 2015-02-07 22:40:18

+0

它适用于'Points Behind'列,但它打破 – bech64 2015-02-07 22:54:29