我有一个包含以下方案的表: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子句显然不能按照我想要的方式工作。
答案 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;