Php 基于另一个表中的条件求和列
我有两张桌子 表1是:Php 基于另一个表中的条件求和列,php,mysql,Php,Mysql,我有两张桌子 表1是: Week / Team / Player / Stat1 / Stat2 / Stat3 / ...<br> 1 / Team1 / Player1 / # / # / # / ...<br> 1 / Team2 / Player2 / # / # / # / ... Where Played Game显示Y表示他们至少玩过一场游戏,N表示他们没有玩过任何游戏 我要做的是将表1中每个
Week / Team / Player / Stat1 / Stat2 / Stat3 / ...<br>
1 / Team1 / Player1 / # / # / # / ...<br>
1 / Team2 / Player2 / # / # / # / ...
Where Played Game显示Y表示他们至少玩过一场游戏,N表示他们没有玩过任何游戏
我要做的是将表1中每个玩家的统计数据按列求和,并将表2中的平局决胜局值添加到其中,但我想要一个条件,如果玩的游戏等于N,它只返回0作为值。希望这是有道理的
这是我的代码:
$sql = "SELECT Player,
SUM (Stat1) AS Stat1,
SUM (Stat2) AS Stat2,
SUM (Stat3) AS Stat3
FROM Table 1
GROUP BY Player
ORDER BY Stat1 DESC";
对我来说,这显然是对价值的总结。我的问题是我不确定如何从另一个表中检索信息,并在同一个查询中执行我想要的操作。我试过一个带有sum的WHEN和IF语句,但都不起作用。我是新来的,所以我正在努力学习,但我现在被卡住了
非常感谢您的帮助。您需要条件求和,它使用
CASE
语句作为聚合函数的参数:
SELECT t1.Player,
(SUM(CASE WHEN t2.Played = 'Y' THEN Stat1 ELSE 0 END) +
MAX(CASE WHEN t2.Played = 'Y' THEN TIEBREAKER ELSE 0 END)
) AS Stat1,
SUM(CASE WHEN t2.Played = 'Y' THEN Stat2 ELSE 0 END) AS Stat2,
SUM(CASE WHEN t2.Played = 'Y' THEN Stat3 ELSE 0 END) AS Stat3
FROM Table1 t1 LEFT JOIN
Table2 t2
ON t1.player = t2.player AND t1.team = t2.team
GROUP BY t1.Player
ORDER BY Stat1 DESC;
要从两个表中获取数据,请将另一个表包含在
`FROM table1, table2`
和他们一起
`Where Table1.Player=Table2.Player`
这样,在结果中,Player列将拥有每个Player一次,sum列(如Stat1、Stat2、Stat3)将对表2中每个记录的Stat列求和,该记录在表1中有一个对应的Player(即所有记录)
我不知道php部分,也不知道你说的是什么意思
我只希望在统计数据汇总后添加一次平局破坏者
但我认为这一查询将适用于其余部分
`SELECT Table2.Player, #I assume Table1.Player has repeat values and stuff,
SUM ( if ( Table2.PlayedGame="Y", Table1.Stat1, 0) ) AS Stat1,
SUM ( if ( Table2.PlayedGame="Y", Table1.Stat2, 0) ) AS Stat2,
SUM ( if ( Table2.PlayedGame="Y", Table1.Stat3, 0) ) AS Stat3
FROM Table1, Table2
Where Table1.Player = Table2.Player
GROUP BY Player
ORDER BY Stat1 DESC";`
谢谢你的回复,但是我使用了这种格式,它仍然不起作用
$sql=“选择t1.Player,SUM(当t2.PlayedGames='Y'时为案例,然后(Plants+t2.Tiebreaker)否则为0结束)作为EUGBL17FLPlayerData t1左侧的植物在t1上加入EUGBL17FLPlayerInfo t2。Player=t2.Player和t1.Team=t2。团队按t1分组。玩家按植物顺序说明”代码>我想澄清一下,当玩的游戏等于N时,它会显示信息并输出0,但是它会为它加在一起的每一个属性加上平局破坏者值,而我只希望平局破坏者在统计数据求和后添加一次。@user3601494您不想要条件求和。您想规范化您的设计!?!!!谢谢这似乎奏效了@草莓我不知道你是什么意思?@user3601494那么你该知道了!
`SELECT Table2.Player, #I assume Table1.Player has repeat values and stuff,
SUM ( if ( Table2.PlayedGame="Y", Table1.Stat1, 0) ) AS Stat1,
SUM ( if ( Table2.PlayedGame="Y", Table1.Stat2, 0) ) AS Stat2,
SUM ( if ( Table2.PlayedGame="Y", Table1.Stat3, 0) ) AS Stat3
FROM Table1, Table2
Where Table1.Player = Table2.Player
GROUP BY Player
ORDER BY Stat1 DESC";`