mysql - 如何为 SUM() 选择不同的行?

标签 mysql

我正在尝试生成一份报告,该报告将提供过去 3 个月的每日“绘图”销售额,但我很难让 SUM() 正确相加。单个 Transaction_ID 可能跨越多个 Plot 记录。使用下面的查询,如果有 2 个地 block 具有相同的 Transaction_ID,它会将它们加在一起,这不是我想要的。我需要它在 SUM() 中只使用一次事务行。

SELECT 
    DATE_FORMAT(Transactions.CreateDate,'%m-%d') AS MonthAndDay, 
    DATE_FORMAT(Transactions.CreateDate,'%M, %D') AS Day, 
    SUM(Transactions.AmountTotal) AS DailySales 
FROM 
    Transactions, 
    Plots 
WHERE 
    Transactions.Transaction_ID = Plots.Transaction_ID AND 
    Transactions.CreateDate <= CURDATE() AND 
    Transactions.CreateDate >= DATE_SUB(CURDATE(),INTERVAL 3 MONTH) 
GROUP BY 
    MonthAndDay 
ORDER BY 
    MonthAndDay ASC 

表结构如下所示:

+-----------------------------------+----------------------------------------------------------------------------------------------------+------+-----+---------------------+----------------+
| Field                             | Type                                                                                               | Null | Key | Default             | Extra          |
+-----------------------------------+----------------------------------------------------------------------------------------------------+------+-----+---------------------+----------------+
| Transaction_ID                    | int(11)                                                                                            | NO   | PRI | NULL                | auto_increment | 
| CreateDate                        | datetime                                                                                           | NO   |     | 0000-00-00 00:00:00 |                | 
| AmountTotal                       | decimal(10,2)                                                                                      | NO   |     | 0.00                |                | 
+-----------------------------------+----------------------------------------------------------------------------------------------------+------+-----+---------------------+----------------+

+------------------------+-------------+------+-----+---------------------+----------------+
| Field                  | Type        | Null | Key | Default             | Extra          |
+------------------------+-------------+------+-----+---------------------+----------------+
| Plot_ID                | int(11)     | NO   | PRI | NULL                | auto_increment | 
| Transaction_ID         | int(11)     | YES  | MUL | NULL                |                | 
| Plot                   | varchar(10) | NO   |     | 0                   |                | 
+------------------------+-------------+------+-----+---------------------+----------------+

最佳答案

以下解决方案有效,尽管使用了子查询:

SELECT
   DATE_FORMAT(Transactions.CreateDate,'%m-%d') AS MonthAndDay,
   DATE_FORMAT(Transactions.CreateDate,'%M, %D') AS Day,
   SUM(Transactions.AmountTotal) AS DailySales
FROM
   Transactions
WHERE
   Transactions.Transaction_ID IN (SELECT DISTINCT Transaction_ID FROM Plots) AND
   Transactions.CreateDate <= CURDATE() AND
   Transactions.CreateDate >= DATE_SUB(CURDATE(),INTERVAL 3 MONTH)
GROUP BY
   MonthAndDay
ORDER BY
   MonthAndDay ASC; 

关于mysql - 如何为 SUM() 选择不同的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10684686/

相关文章:

mysql - 我们可以在一台电脑上安装两个不同端口的Mysql吗?

mysql - 如何修复带有连接的sql语句?

python - django使用分页时出错

php - 我可以从 PHP 自动定位 MySQL 可执行文件吗?

PHP - 循环和lastInsertId()

mysql - 从不同类别中选择项目,包括没有类别的文章

java - 如何使用rest api插入hibernate中的表,并且该表2列是另一个表的外键?

php - 如何在选择下拉框中设置值?

php - yii 查询构建器为文本字段插入\r\n

php - Mysql插入和更新未知错误