每周总得分的MySQL循环
下面的语句输出每周总得分的MySQL循环,mysql,Mysql,下面的语句输出用户名和周分数。我希望它循环17次,得到17周中每一周的分数 SELECT userName, (totalWins+(totalPushs*.5)) AS week1Score FROM ( SELECT *, SUM(win) AS totalWins, SUM(lost) AS totalLost, SUM(push) AS totalPushs FROM ( SELECT *, (finalResult = 'win') AS win, (final
用户名
和周分数
。我希望它循环17次,得到17周中每一周的分数
SELECT userName, (totalWins+(totalPushs*.5)) AS week1Score FROM (
SELECT *, SUM(win) AS totalWins, SUM(lost) AS totalLost, SUM(push) AS totalPushs FROM (
SELECT *, (finalResult = 'win') AS win, (finalResult = 'loss') AS lost, (finalResult = 'push') AS push FROM (
SELECT userName, IF (pickID=visitorID, visitorResult, homeResult) AS finalResult
FROM table_users
JOIN table_picks
ON table_users.userID = table_picks.userID
JOIN table_schedule
ON table_picks.gameID = table_schedule.gameID
WHERE weekNum = 1
) x
) x GROUP BY userName
) x ORDER BY userName
上述语句输出以下内容
+-----------------------+
| userName | week1Score |
+-----------------------+
+------------------------------------------------------------------------+
| userName | week1Score | week2Score | week3Score | week4Score | week... |
+------------------------------------------------------------------------+
我希望它循环17次以输出以下内容
+-----------------------+
| userName | week1Score |
+-----------------------+
+------------------------------------------------------------------------+
| userName | week1Score | week2Score | week3Score | week4Score | week... |
+------------------------------------------------------------------------+
我将如何使用MySQL循环来实现这一点?我认为您的查询有点复杂。但是,有一种更好的方法:Pivot查询 MySQL没有“pivot”指令,但可以构建表达式以获得所需的输出 我将构建一个临时表,使内容更易于阅读(我使用用户变量使内容更清晰): 现在,有趣的部分是:构建数据透视表
-- First, build the expression for each column
select
group_concat(
concat(
'sum(case weekNum when ', weekNum, ' then score end) as week', weekNum, 'score'
)
)
into @sql
from (select distinct weekNum from temp_step01) as a;
-- Then, create a complete SELECT statement
set @sql = concat('select userId, userName, ', @sql, ' from temp_step01 group by userId');
-- OPTIONAL: Check that the sql statement is well written:
select @sql;
-- Now, prepare a statement, and execute it
prepare stmt from @sql;
execute stmt;
-- When you're done, don't forget to deallocate the statement
deallocate prepare stmt;
有点费劲,但我想这会给你你所需要的。希望有帮助。我在“@SQL”附近遇到了一个
SQL语法错误,“
这是我得到的结果,列名@SQL
值选择userId、userName、sum(case weekNum when 1 t.
不确定这是否是它的假设,但这不是我想要的。继续执行以下步骤:准备语句并执行它(您是否注意到我在“select@sql”上面写了“OPTIONAL”?这是为了让您在执行之前阅读完整的sql语句)@user2759965@sql
变量保存获取所需内容所需的查询。但您需要执行它。从@sql;execute stmt;执行准备stmt以获取结果…当您完成后,deallocate prepare stmt;
将清理准备好的语句。