Sum 列返回不准确的结果

Posted

技术标签:

【中文标题】Sum 列返回不准确的结果【英文标题】:Sum column returns inaccurate result 【发布时间】:2019-02-15 13:16:36 【问题描述】:

我正在编写一些代码来计算 mysql 表的“持续时间”列中的秒数。我目前使用的代码似乎是对列的所有行求和,除了第一行。

例如,如果表包含 3 行,例如:

    10 15 20

该列的总和应该是 45,但我使用的代码将返回 35 并完全跳过表中的第一行。

这是我当前的代码:

// GET THE DATA FROM THE 'DURATION' COLUMN
$sql = mysqli_query($mysqli,"SELECT SUM(duration) AS total FROM timesheet WHERE username='$qname' AND payperiod='$payperiod'");

// LOOP AND ADD ALL THE DATA IN THE DURATION COLUMN
while ($result = mysqli_fetch_assoc($sql))
 
   $duration = $result['total'];

我错过了什么?该代码在运行时有效并生成分配给变量 $duration 的总和,但是总和数量不正确,并且似乎总是跳过了要求和的列中表的第一行。

在以下屏幕截图中,求和的列是第一个表中的“DURATION”列。然后将总和转换为小时的十进制表示并显示在第二个表的“总小时”列中。无论向表中输入什么值,最终结果 TOTAL HOURS 总是缺少第一行中的数据。

当我绕过 php 在 mysql 数据库本身上运行相同的查询时,我得到了相同的结果。下面是在数据库上运行的查询的屏幕截图。

These are the rows that are being queried

This is the sum result returned by the database

从截图中可以看出,找到了3条记录,第一条记录的时长是13.38小时,第二条记录是0.19小时,第三条记录是0.05小时,但是数据库产生的总和是888秒,或 0.24 小时。

【问题讨论】:

我认为这与 javascript 没有任何关系。也许用 PHP 替换它? 我没有在这段代码中使用 javascript,它完全是 PHP 和 mysql 也许第一行有一些不同的用户名或支付期值? 不,第一行包含所有相同的信息。当我从表中为给定的用户名和付款期选择所有数据时,它当前显示与该查询匹配的 3 行数据。然后,当我对这 3 行的持续时间列求和时,求和的结果仅显示第二行和第三行的组合值,但从不显示第一行。 是的,payperiod 字段的类型和值是什么? 【参考方案1】:

找到了解决方案。我将查询更改为:

$xxy = mysqli_query($mysqli,"SELECT SUM(duration) AS totalsum FROM timesheet WHERE username='$qname' AND payperiod='02/14/2019 - 02/21/2019'");

$xxy = mysqli_query($mysqli,"SELECT SUM(duration) AS totalsum FROM timesheet WHERE username='$qname' AND status='CLOCKED OUT' AND (timestamp_in BETWEEN '$start_date' AND '$end_date')");

更改查询解决了问题,但我没有弄清楚问题的原因。无论我如何编写查询,返回的结果都是相同的,但第一个查询的总和是错误的,而第二个查询的总和是正确的。

感谢大家的意见和帮助我解决这个问题。

【讨论】:

以上是关于Sum 列返回不准确的结果的主要内容,如果未能解决你的问题,请参考以下文章

距离Between()返回不准确的结果?

yii2数据库简单操作

BigQuery 未准确返回结果

Yii2.0数据库操作增删改查详解

MYSQL SUM() 返回不正确的值。没有连接

sql 左连接查询出来的求各结果不准确,被乘了2倍