对于这个问题,我找到了一些不同的答案,但似乎无法使查询正常工作。
这是我的表,其中包含user、weekNo、salesTotalYTD列。
我目前正在把这些拿出来,按周分组,就像这样:
+------+--------+---------------+
| user | weekNo | salesTotalYTD |
+------+--------+---------------+
|Jared | 1 | 200 |
+------+--------+---------------+
| Jim | 1 | 50 |
+------+--------+---------------+
|Jared | 2 | 30 |
+------+--------+---------------+
| Jim | 2 | 100 |
+------+--------+---------------+
我试图做但无法完成的是:
+------+--------+---------------+
| user | weekNo | salesTotalYTD |
+------+--------+---------------+
|Jared | 1 | 200 |
+------+--------+---------------+
| Jim | 1 | 50 |
+------+--------+---------------+
|Jared | 2 | 230 |
+------+--------+---------------+
| Jim | 2 | 150 |
+------+--------+---------------+
这是我为第一次通过工作的查询,但之后的每一次通过都是错误的:
SET @runtot:=0
SELECT
salesTotalYTD,
user,
(@runtot := @runtot + salesTotalYTD) AS rt
FROM weeksAndSalesmantbl
GROUP BY user, weekNo
ORDER BY (CASE WHEN weekNo = 52 THEN 0 ELSE 1 END) ASC, weekNo, user ASC
更新
更新代码由蒂姆提供,但返回错误:
$assignments = "
SELECT
t1.user,
t1.weekNo,
(SELECT SUM(t2.salesTotalYTD) FROM weeksAndSalesmantbl t2
WHERE t2.user = t1.user AND t2.weekNo <= t1.weekNo) AS salesTotalYTD
FROM weeksAndSalesmantbl t1
ORDER BY
t1.weekNo,
t1.user";
$salesTotalSalesManCumulative = [];
$assignmentsqry = mysqli_query($db,$assignments);
if (!$assignmentsqry) {
printf("Error: %s\n", mysqli_error($db));
exit();
}
while ($row = mysqli_fetch_array($assignmentsqry)) {
$float = floatval($row['salesTotalYTD']);
$float = round($float,2);
array_push($salesTotalSalesManCumulative,$float);
}
您可以使用标准运行的总计查询来实现这一点。然而,在这种情况下,我们也将总和限制为特定用户。
SELECT
t1.user,
t1.weekNo,
(SELECT SUM(t2.salesTotalYTD) FROM weeksAndSalesmantbl t2
WHERE t2.user = t1.user AND t2.weekNo <= t1.weekNo) AS salesTotalYTD
FROM weeksAndSalesmantbl t1
ORDER BY
t1.weekNo,
t1.user
输出:
此处演示:
更新:
因为在游戏后期你告诉我们eks sAndSalesmantbl
是一个临时表,而MySQL不喜欢我上面给出的查询,我们可以考虑使用会话变量对你的表进行一次传递。
SET @rt = NULL;
SET @user = NULL;
SELECT
t.user,
t.weekNo,
t.rt AS salesTotalYTD
FROM
(
SELECT
@rt:=CASE WHEN @user=user THEN @rt+salesTotalYTD ELSE salesTotalYTD END AS rt,
@user:=user AS user,
weekNo
FROM weeksAndSalesmantbl
ORDER BY
user,
weekNo
) t
ORDER BY
t.weekNo,
t.user;
如果这仍然会给您带来错误,那么您可能需要考虑删除该临时表。无论如何,您可能不希望在生产中使用临时表。
问题内容: 我有这个MySQL查询: 返回如下内容: 我真正想要的是末尾的另一列显示运行总计: 这可能吗? 问题答案: 也许这对您来说是一个更简单的解决方案,并且可以防止数据库不得不执行大量查询。这仅执行一个查询,然后在一次通过中对结果进行一点数学运算。 这将为您提供一个额外的RT(运行总计)列。不要错过顶部的SET语句来首先初始化运行的total变量,否则您将只获得一列NULL值。
我有两个表用于我的在线订单:product\u items 产品项包含销售价格、数量和成本价格。订单表包括成本、装运和货币 我想获得所有订单(按货币分组)的所有销售价格(*数量)和成本价格(*数量)以及成本装运的总和 问题是,当我将成本加起来时,订单中每个项目的成本加起来(因为它们是合并的) 因此,如果订单1有2个项目,运费为10欧元,那么它将退回20欧元。 如果我不加运费,那么我只得到最后一个值
问题内容: 我有这个MySQL查询: 返回如下内容: 我真正想要的是末尾的另一列以显示运行总计: 这可能吗? 问题答案: 也许对您来说是一个更简单的解决方案,并且可以防止数据库不得不执行大量查询。这仅执行一个查询,然后在一次通过中对结果进行一些数学运算。 这将为您提供一个额外的RT(运行总计)列。不要错过顶部的SET语句来首先初始化运行中的total变量,否则您将只获得一列NULL值。
问题内容: 我有两个具有相同结构的表。我需要从一个表中选择数据,然后将它们存储到另一个表中。 我怎样才能做到这一点? 问题答案: 因为它们是相同的结构,所以您可以做
问题内容: 查看数据库时,对所有表(包括它们的行数)进行概述非常有用: information_schema数据库中的MySQL TABLES表提供了一个table_rows字段: 但是table_rows仅对某些数据库引擎有效,而对INNODB则为NULL或不准确。 因此,有必要组成一个对每个表执行显式SELECT Count(*)…的方法。 在关于stackoverflow的这个问题的许多重复
问题内容: 如何选择一个表中所有未出现在另一表中的行? 表格1: 表2: 表1中不在表2中的行的示例输出: 也许这样的事情应该工作: 问题答案: 如果您在另一条注释中提到有300列,并且想要对所有列进行比较(假设这些列的名称相同),则可以使用a 隐式联接两个表之间所有匹配的列名称,以便不必繁琐地手动输入所有加入条件: