【问题标题】:Monthly totals month returning NULL, and only outputting running totalMonthly totals 月份返回NULL,只输出运行总计
【发布时间】:2013-05-19 19:09:35
【问题描述】:

我正在使用以下内容尝试以如下格式输出我的每月总计:

 January
 Quoted Total : £678
 Parts Total : £432
 Profit Total : £244

 February
 Quoted Total : £650
 Parts Total : £345
 Profit Total : £123

等等…………

    // Work Complete Totals
    $query = $db->query("SELECT SUM(pricequoted) AS pricequotedtotal,
                                SUM(partprice) AS partpricetotal,
                                SUM(profit) profittotal,
                                DATE_FORMAT('%Y-%m', completeddate) AS month 
                         FROM `jobdetails` 
                         WHERE jobstatus='complete'
                         GROUP BY DATE_FORMAT('%Y-%m', completeddate)");


    echo '<div style="float:right; padding-right:10px;">';
    echo '<strong>Work Complete Totals</strong>';

    while($result = $query->fetch_object()) {

        $pricequoted = number_format($result->pricequotedtotal, 2, '.', '');
        $partprice   = number_format($result->partpricetotal, 2, '.', '');
        $profit      = number_format($result->profittotal, 2, '.', '');

        echo '<p><strong style="color:red;">Quoted Total : &pound;'.$pricequoted.'</strong></p>';
        echo '<p><strong style="color:Darkorange ;">Parts Total : &pound;'.$partprice.'</strong></p>';
        echo '<p><strong style="color:green;">Profit Total : &pound;'.$profit.'</strong></p>';
    }

    echo '</div>';

我遇到的问题是它只输出运行总计,所以我在页面底部一次得到以下内容,但仅此而已:

Work Complete Totals
Quoted Total : £1460.00

Parts Total : £541.43

Profit Total : £918.57

如果我在 phpmyadmin 中运行上述查询,我​​会得到结果:

pricequotedtotal    partpricetotal  profittotal        month
      1460              541.43      918.5699999999998   NULL

我的表格布局如下:

id  customerID  name    facebookuserurl tel email   address itemforrepair   repairdetails   otherdetails    pricequoted partprice   profit  datepartordered jobstatus   dateofcompletion    datecreated itemnumber

下面是一个示例行:

49  37ac4   Ellen Frost https://www.facebook.com/ellen.mccormick.18             Galaxy S3 (Fullsize) Blue   Broken front glass and also digitiser not working.  Quoted customer on whole lcd, digitiser assembly r...   140 114.98  25.02   2013-05-02  complete    2013-05-08  2013-05-01  251258104217

编辑>> 下面是表格中几行的屏幕截图。

编辑>>

这是我的表结构:

【问题讨论】:

  • mysqli 这个问题怎么办?它只是运行查询的 API。我宁愿用 SQL 标记它而不是 mysqli。

标签: php mysql sql group-by cumulative-sum


【解决方案1】:

伊恩,

我想下面的查询会对你有所帮助。

SELECT SUM(pricequoted) AS pricequotedtotal, SUM(partprice) AS partpricetotal, SUM(profit) profittotal, MONTHNAME(dateofcompletion) FROM jobdetails WHERE jobstatus='complete' GROUP BY DATE_FORMAT(dateofcompletion, '%Y-%m ') 按完成日期排序;

+-----------------+----------------+------------- +------------------------------+ |报价总额 |部分价格总计 |利润总额 |月名(完成日期)| +-----------------+----------------+------------- +------------------------------+ | 140 | 114.98 | 25.02 |五月 | | 140 | 114.98 | 25.02 |六月 | +-----------------+----------------+------------- +------------------------------+ 2 行(0.00 秒)

【讨论】:

    【解决方案2】:

    你可以试试这个查询

    SELECT SUM(pricequoted) AS pricequotedtotal,
           SUM(partprice) AS partpricetotal,
           SUM(profit) AS profittotal,
           MONTHNAME(completeddate) AS month 
               FROM `jobdetails` 
           WHERE jobstatus='complete'
               GROUP BY MONTH(completeddate)
    

    上表中不存在列“completeddate”,请改用“dateofcompletion”

    因此,运行查询并将它们放入 while 循环将产生您想要的结果

    我也看到了你的表结构,最好使用varcharintfloat 等来格式化一个表。text 列消耗更多内存

    http://www.pythian.com/blog/text-vs-varchar/

    http://nicj.net/mysql-text-vs-varchar-performance/

    【讨论】:

      【解决方案3】:

      你需要改变这个

      DATE_FORMAT('%Y-%m', completeddate)
      

      DATE_FORMAT(completeddate, '%Y-%m')
      

      这就是为什么您在month 列中得到NULL,因此只有一行。

      manual entry

      【讨论】:

      • 当我改变时,我根本没有得到总数。
      • 如何在其中添加月份名称或编号,以便我知道每个结果来自哪个月份?
      • 您可以使用 MONTHNAME() 函数。 dev.mysql.com/doc/refman/4.1/en/…SELECT MONTHNAME(completeddate) ...GROUP BY DATE_FORMAT(completeddate, '%Y-%m')...
      【解决方案4】:
      SUM(pricequoted) AS pricequotedtotal,
      SUM(partprice) AS partpricetotal,
      SUM(profit) profittotal,
      

      应该是

      SUM(pricequoted) AS pricequotedtotal,
      SUM(partprice) AS partpricetotal,
      SUM(profit) AS profittotal,
      

      你错过了一个“AS”

      【讨论】:

      • 那不显示任何东西
      • 我得到的只是标题“工作完成总计”,下面什么都没有。
      • 用你的替换它。你错过了什么。
      • 我确实用我的替换它并得到上述结果
      • 添加 AS 只是再次给我滚动总数(总结所有已完成的记录)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-08
      相关资源
      最近更新 更多