[英]Tried sum multiple sums
我试图总结多个这样的总和:
SELECT
`users`.*,
@attackPower := FLOOR(SUM(IF( `weapons`.`weaponeType` = 'atk',`weapons`.`weaponPower` * `weapons_has_users`.`count` , 0 ) )) AS `attackPower` ,
@defencePower := FLOOR(SUM(IF( `weapons`.`weaponeType` = 'def', `weapons`.`weaponPower` * `weapons_has_users`.`count` , 0 ) )) AS `defencePower`,
@spyPower := FLOOR(SUM(IF( `weapons`.`weaponeType` = 'spy', `weapons`.`weaponPower` * `weapons_has_users`.`count` , 0 ) )) AS `spyPower`,
@uniPower := FLOOR(SUM(IF( `weapons`.`weaponeType` = 'uni', `weapons`.`weaponPower` * `weapons_has_users`.`count` , 0 ) )) AS `uniPower`,
(@attackPower + @defencePower + @spyPower + @uniPower) as `power`
FROM `users`
LEFT JOIN `weapons_has_users` ON `users`.`userId` = `weapons_has_users`.`userId`
LEFT JOIN `weapons` ON `weapons`.`weaponId` = `weapons_has_users`.`weaponId`
但是power
返回 NULL 我能做些什么来解决这个问题?
MySQL 文档特别警告不要在同一语句中分配和使用变量。
此外,如果要在查询中使用聚合函数(并且希望返回多行),则需要一个子查询。
因为需要使用聚合,所以不妨使用子查询:
select u.*,
(attackPower + defencePower + spyPower + uniPower) as `power`
from (SELECT `users`.*,
FLOOR(SUM(IF( `weapons`.`weaponeType` = 'atk',`weapons`.`weaponPower` * `weapons_has_users`.`count` , 0 ) )) AS `attackPower` ,
FLOOR(SUM(IF( `weapons`.`weaponeType` = 'def', `weapons`.`weaponPower` * `weapons_has_users`.`count` , 0 ) )) AS `defencePower`,
FLOOR(SUM(IF( `weapons`.`weaponeType` = 'spy', `weapons`.`weaponPower` * `weapons_has_users`.`count` , 0 ) )) AS `spyPower`,
FLOOR(SUM(IF( `weapons`.`weaponeType` = 'uni', `weapons`.`weaponPower` * `weapons_has_users`.`count` , 0 ) )) AS `uniPower`,
FROM `users` LEFT JOIN
`weapons_has_users`
ON `users`.`userId` = `weapons_has_users`.`userId` LEFT JOIN
`weapons`
ON `weapons`.`weaponId` = `weapons_has_users`.`weaponId`
GROUP BY users.id
) u;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.