지난 3 개월 동안 매일 "음모"판매량을 제공하는 보고서를 실행하려고하는데 SUM()을 올바르게 추가하는 데 어려움을 겪고 있습니다. 단일 Transaction_ID는 여러 Plot 레코드에 걸쳐있을 수 있습니다. 아래 쿼리에서 동일한 Transaction_ID가있는 2 개의 플롯이있는 경우이를 함께 추가합니다. 이는 원하는 바가 아닙니다. SUM() 내에서 트랜잭션 행을 한 번만 사용해야합니다. SUM()에 DISTINCT 행을 어떻게 선택합니까?
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 | |
+------------------------+-------------+------+-----+---------------------+----------------+
당신은 Plot_ID, MonthAndDay' BY'GROUP 싶지 않아? – eggyal
이렇게하면 보고서의 요점 인 MonthDay별로 그룹화가 끊어지며 Plot 레코드에 여러 번 표시되는 트랜잭션이 합산되는 문제는 해결되지 않습니다 (원래 문제의 주요 부분입니다). 전술 한 바와). – Travis