添加2个或更多不同行的列值。 SQL

时间:2015-11-05 04:53:37

标签: php sql mysqli sum

我有一个包含以下方案的表:http://i.stack.imgur.com/zH2zz.png
此表适用于冰球联赛(Link Here)。这是统计数据将在数据库中保存的第二季。如果您查看链接中的下拉列表,您会看到我可以为这两个季节生成前20个列表(1个季节除了1个测试员之外没有其他数据)。目标是总共两个赛季,并有一个历史前20名。我尝试过使用sum函数,但实际上每一行都加入了1.

我只想总结重复玩家ID的行数。例如,我是玩家ID#2,我需要每个目标,并且每行包含我的PID,但我需要在1个查询中为所有前20名玩家添加。以下是我目前使用的一些查询。

SELECT Rosters.PID, Rosters.Goals, Rosters.Assists, Rosters.PIM, Rosters.Num, Rosters.TID, Players.pid, Players.firstname, Players.lastname,
      (Rosters.Goals + Rosters.Assists) AS Points
      FROM Rosters
      INNER JOIN Players
      ON Rosters.PID = Players.pid
      WHERE Rosters.TID BETWEEN $parameter
      ORDER BY Points DESC, Goals DESC
      LIMIT 0,20

$parameter基于团队ID(TID)有16个tid(每个季节8个)。当参数为1-16时,此查询获取所有记录,它不会通过PID添加非不同的行(这最终是我想要学习的内容)。这是显示查询如何实例化的下拉列表

<div class="ddstyle">
    <select name="DropDownTeams" id="DDTeams">
        <option>Select a Season</option>
        <option value="stats2.php?tid=9 AND 16">2015-2016</option>
        <option value="stats2.php?tid=1 AND 8">2014-2015</option>
        <option value="stats2.php?tid=1 AND 16">All Time</option>
    </select>
</div>

我试着这样做:

SELECT Rosters.PID, SUM( Rosters.Goals ) Goals, SUM( Rosters.Assists ) Assists, SUM( Rosters.PIM ) PIM, Rosters.Num, Rosters.TID, Players.pid, Players.firstname, Players.lastname, 
    SUM((Rosters.Goals + Rosters.Assists)) AS Points
    FROM Rosters
    INNER JOIN Players
    ON Rosters.PID = Players.pid
    WHERE Rosters.TID BETWEEN 1 AND 16
    ORDER BY Points DESC, Goals DESC
    LIMIT 0,20;

但是,这只是将每一条记录合并为一行。当与SUM()函数一起使用时,Where子句显然不能按照我想要的方式工作。

1 个答案:

答案 0 :(得分:1)

加入Group BY部分http://www.w3schools.com/sql/sql_groupby.asp

SELECT Rosters.PID
    ,SUM(Rosters.Goals) Goals
    ,SUM(Rosters.Assists) Assists
    ,SUM(Rosters.PIM) PIM
    ,Players.pid
    ,SUM((Rosters.Goals + Rosters.Assists)) AS Points
FROM Rosters
INNER JOIN Players ON Rosters.PID = Players.pid
WHERE Rosters.TID BETWEEN 1
        AND 16
GROUP BY 
    Players.pid
ORDER BY Points DESC
    ,Goals DESC 
LIMIT 0
    ,20;