每月总计月份返回NULL,仅输出运行总计

时间:2013-05-24 08:25:18

标签: php mysql sql group-by running-total

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

 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

编辑&gt;&gt; 下面是表格中几行的屏幕截图。 enter image description here

编辑&gt;&gt;

这是我的表结构: enter image description here

4 个答案:

答案 0 :(得分:6)

您需要更改此

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

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

这就是您在NULL列中获得month因此只有一行的原因。

请参阅manual entry

答案 1 :(得分:5)

伊恩,

我想以下查询会对您有帮助。

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')按日期顺序完成;


    +------------------+----------------+-------------+-----------------------------+
    | pricequotedtotal | partpricetotal | profittotal | MONTHNAME(dateofcompletion) |
    +------------------+----------------+-------------+-----------------------------+
    |              140 |         114.98 |       25.02 | May                         | 
    |              140 |         114.98 |       25.02 | June                        | 
    +------------------+----------------+-------------+-----------------------------+
2 rows in set (0.00 sec)

答案 2 :(得分: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”

答案 3 :(得分:4)

您可以尝试此查询

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/