首页 > 解决方案 > 选择按天分组的列值总和

问题描述

我有一个表格,其中包含每个发出的订单的日期时间、订单价值和件数列。日期时间是标准的日期时间 mysql 格式。

为了得到订单的总和,我有一个这样的查询:

$sqlsum = "SELECT SUM(order_value) FROM orders";
if (mysqli_query($conn, $sqlsum)) {
    $resultsum = mysqli_query($conn, $sqlsum);
    while($row = mysqli_fetch_assoc($resultsum)) {
        $total_sales = $row['SUM(order_value)'];

        // and here I use the value in a simple report
    }
}

要获得所有单笔订单的报告,通常我会这样做:

<?php

$sql = "SELECT * FROM orders";
$result = mysqli_query($conn, $sql);
if (mysqli_num_rows($result) > 0) {
    while($row = mysqli_fetch_assoc($result)) {
        $order_time = $row["datetime"];
        $order_value = $row["order_value"];
        $pieces_number = $row["pieces"];

        // and here I use the results in a detailed report
    }
}
?>

现在我必须制作两份不同的报告,每天一份,每月一份,每份都必须显示:
- 订单数
- 订单值
总和 - 件数总和
查询应该如何获得计数每天的订单数量以及每天的价值和件数的总和?

在网站上搜索类似问题,但没有找到满足我需求的明确解决方案的帖子。

标签: phpmysqldatesum

解决方案


在第一种情况下,您需要使用以下DATE()功能按天分组:

SELECT 
  DATE(datetime) day, 
  COUNT(*) orderscounter,
  SUM(order_value) valuesum,
  SUM(pieces) piecessum
FROM orders
GROUP BY day

在第二种情况下,您需要使用YEAR()andMONTH()函数按年/月分组:

SELECT 
  YEAR(datetime) year,
  MONTH(datetime) month, 
  COUNT(*) orderscounter,
  SUM(order_value) valuesum,
  SUM(pieces) piecessum
FROM orders
GROUP BY year, month

推荐阅读