【问题标题】:sum in query / subquery查询/子查询中的总和
【发布时间】:2009-09-10 18:54:17
【问题描述】:

表格有以下信息:

日期|供应商|销售额|百分比| -------------------------- 2009-03-03| 10 |13.50| 1.30 | 2009-03-10| 10 |42.50| 4.25 | 2009-03-03| 21 |23.50| 2.30 | 2009-03-10| 21 |32.50| 3.25 | 2009-03-03| 18 |53.50| 5.30 | 2009-03-10| 18 |44.50| 4.45 |

我希望它根据日期分类到单独的表格中,如下所示:

日期|供应商|销售额|百分比| -------------------------- 2009-03-03| 10 |13.50| 1.30 | 2009-03-03| 18 |53.50| 5.30 | 2009-03-03| 21 |23.50| 2.30 | 日期|供应商|销售额|百分比| -------------------------- 2009-03-10| 10 |42.50| 4.25 | 2009-03-10| 18 |44.50| 4.45 | 2009-03-10| 21 |32.50| 3.25 |

我可以完成这项工作,但我无法为每个单独的表格提供总计,例如:

日期|供应商|销售额|百分比| -------------------------- 2009-03-03| 10 |13.50| 1.30 | 2009-03-03| 18 |53.50| 5.30 | 2009-03-03| 21 |23.50| 2.30 | 2009 年 3 月 3 日的总销售额 = 90.50 美元 2009 年 3 月 3 日的总百分比 = 8.90 美元 日期|供应商|销售额|百分比| -------------------------- 2009-03-10| 10 |42.50| 4.25 | 2009-03-10| 18 |44.50| 4.45 | 2009-03-10| 21 |32.50| 3.25 | 2009 年 3 月 3 日的总销售额 = 119.50 美元 2009 年 3 月 3 日的总百分比 = 11.95 美元

我可以获得所有表格的总数,但不能获得单个表格的总数。 这是我的代码:

    <?php
$con = mysql_connect("localhost", $dbUser, $dbPassword);
if (!$con)
{
die('Could not connect: ' . mysql_error());
}

mysql_select_db("beans", $con);

$result = mysql_query("SELECT * FROM Deposits WHERE market = '4' ORDER BY eventdate, vendor ASC") or die(mysql_error());

$dateChk = 0;

while($row = mysql_fetch_array($result))
{ 
    $date = $row["eventdate"];
    $liclass = $row["vendor"];
    $url = $row["trxid"];
    $amountdep = $row["amount"];
    $depcheck = $row["checkno"];
       $deposit_Total = $deposit_Total + $amountdep;
       $deposit_3Total = $deposit_3Total + $depcheck;
       $deposit_3 = $amountdep / 100;
       $dep_percent = $deposit_3 * 3;
       $depper_Total = $depper_Total + $dep_percent;
       $week = date("W", db_date_to_timestamp($date));
       $year = date("Y", db_date_to_timestamp($date));        


If($dateChk != $week)
{     

        echo "<table class=\"adverts\" width=\%100\" cellpadding=\"4\">\n";
        echo "<tr><th>Date</th><th>Vendor</th><th>Total Sales</th><th>3% Due</th><th>Week</th></tr>\n";
        echo "<tr>";  
        echo "<td>$date</td>\n";     
        echo "<td>$liclass</td>\n";           
        echo "<td>$ $amountdep</td>\n";               
        echo "<td>$ $depcheck</td>\n";
        echo "<td>$week</td>\n";      
        echo "</tr>";

}
else 
{
        echo "<tr>";  
        echo "<td>$date</td>\n";   
        echo "<td>$liclass</td>\n";                 
        echo "<td>$ $amountdep</td>\n";               
        echo "<td>$ $depcheck</td>\n";
        echo "<td>$week</td>\n";             
        echo "</tr>";

}
$dateChk = $week;
} 
        echo "</table>\n";
        echo "<p><b>Total reported Market Sales are $ " . $deposit_Total . "</b></p>\n";
        echo "<p><b>3 percent of Total reported Market Sales are $  " . $deposit_3Total . "</b></p>\n";
?>

【问题讨论】:

  • 你想要一个 sql 查询来为你提供每个日期的总数吗?
  • 是的,这是正确的 - 每个日期的总计
  • 您是否尝试过使用 GROUP BY 日期进行 SUM(sales)?
  • 我应该在哪里将该语句和组添加到代码中?

标签: php sql mysql sum


【解决方案1】:

(编辑:抱歉,当我发布时,我看到您在查询中需要它!)

$dateChk = 0;
$firstRow = 1;

while($row = mysql_fetch_array($result))
{ 
    $date = $row["eventdate"];
    $liclass = $row["vendor"];
    $url = $row["trxid"];
    $amountdep = $row["amount"];
    $depcheck = $row["checkno"];
       $deposit_Total = $deposit_Total + $amountdep;
       $deposit_3Total = $deposit_3Total + $depcheck;
       $deposit_3 = $amountdep / 100;
       $dep_percent = $deposit_3 * 3;
       $depper_Total = $depper_Total + $dep_percent;
       $week = date("W", db_date_to_timestamp($date));
       $year = date("Y", db_date_to_timestamp($date));        

If($dateChk != $week)
{         
    if($firstRow == 0)          
    {
        echo "</table>\n";
        echo "<p><b>Total reported Market Sales are $ " . $deposit_week_Total . "</b></p>\n";            
        echo "<p><b>3 percent of Total reported Market Sales are $  " . $deposit_week_3Total . "</b></p>\n";
        $deposit_week_Total = 0;            
        $deposit_week_3Total = 0;

    }else 
    {
        $firstRow = 0;
    }

        echo "<table class=\"adverts\" width=\%100\" cellpadding=\"4\">\n";
        echo "<tr><th>Date</th><th>Vendor</th><th>Total Sales</th><th>3% Due</th><th>Week</th></tr>\n";
        echo "<tr>";  
        echo "<td>$date</td>\n";     
        echo "<td>$liclass</td>\n";           
        echo "<td>$ $amountdep</td>\n";               
        echo "<td>$ $depcheck</td>\n";
        echo "<td>$week</td>\n";      
        echo "</tr>";

}
else 
{
        echo "<tr>";  
        echo "<td>$date</td>\n";   
        echo "<td>$liclass</td>\n";                 
        echo "<td>$ $amountdep</td>\n";               
        echo "<td>$ $depcheck</td>\n";
        echo "<td>$week</td>\n";             
        echo "</tr>";

}
$dateChk = $week;
$deposit_week_Total = $deposit_week_Total + $amountdep;          
$deposit_week_3Total = $deposit_week_3Total + $depcheck;
} 
        echo "</table>\n";
        echo "<p><b>Total reported Market Sales are $ " . $deposit_Total . "</b></p>\n";
        echo "<p><b>3 percent of Total reported Market Sales are $  " . $deposit_3Total . "</b></p>\n";
?>

【讨论】:

  • 好吧,我认为缺少一个';'第 25 行 [固定]。您收到任何错误消息吗? error_reporting(在您的 php.ini 中)是如何设置的?
【解决方案2】:

SQL

"SELECT date, SUM(sales) FROM Deposits WHERE market = '4' GROUP BY date"

您必须使用自己的计算来代替 sum(sales)。我建议将它们放入模型中。

【讨论】:

  • 不起作用 - 它对一些记录进行分组,但不会返回我的所有记录。
  • @Tylee:你也必须按产品分组。
【解决方案3】:

这会有帮助吗?

http://www.plus2net.com/sql_tutorial/sql_sum.php

SELECT SUM (sales) FROM `table_name` WHERE `date` = '$date_you_want'

来自我的以下评论:

SELECT SUM (sales) FROM `table_name` WHERE `date` <= '$start_date_of_week' AND `date` >= '$end_date_of_week'

所以基本上 WHERE 日期小于和大于描述您想要的一周的开始和停止的两个日期......

或者...我认为您也可以将天数添加到 mysql 中的值中

SELECT SUM (sales) FROM table_name WHERE date LIKE '$yyyy-mm-dd %' ...DATE_ADD 代码用于添加天数.. 或 INTERVAL。

【讨论】:

  • 这是一个基于一年中星期的运行表,所以我不想指定每周或日期。
  • 所以你想选择一年中的第 1 周等一年的第 2 周?您应该能够找出该范围,然后在查询中使用它。也许有一个 LIKE。我在刚刚创建的页面中使用了这个查询。 "SELECT * FROM schedule_items WHERE start LIKE '$ymd %'" 其中start 是完整的 DATETIME 字段,$ymd 是 YYYY-MM-DD 值,% 是通配符,因此它可以找到所有值匹配 YYYY-MM-DD 我想你可能会以某种方式应用一个范围.. SELECT SUM (sales) FROM table_name WHERE date date >= $end_date_of_week
【解决方案4】:

您可以使用GROUP BY WITH ROLLUP 直接获得这些总和。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-05
    • 1970-01-01
    • 2011-03-31
    • 1970-01-01
    • 1970-01-01
    • 2018-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多