每周总得分的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;
将清理准备好的语句。