按日期范围和productId对MySQL查询进行分组
因此,我试图修改我的sql代码(参见下面当前结果+sql的屏幕截图),以按月对数据进行分组,并汇总所有paymentSplitAmounts。每一行都应该是唯一的productId 所以最终的结果是按日期范围和productId对MySQL查询进行分组,mysql,sql,Mysql,Sql,因此,我试图修改我的sql代码(参见下面当前结果+sql的屏幕截图),以按月对数据进行分组,并汇总所有paymentSplitAmounts。每一行都应该是唯一的productId 所以最终的结果是 productID total month 1 500 11-2011 2 650 11-2011 3 250
productID total month
1 500 11-2011
2 650 11-2011
3 250 11-2011
1 100 10-2011
2 150 10-2011
3 750 10-2011
我似乎不能理解正确的语法。我哪里做错了
你已经提到了“分组”。为此,您需要将
groupby
添加到查询中,按productid和月份对数据进行分组,然后您可以添加sum
对paymentSplitAmount进行合计
分组语法没有错,它完全丢失了。:)
这假定cp.paymentDate已包含月份。如果没有,你必须将每个日期四舍五入到月的第一天,并按该日期分组
现在按月分组。看起来您希望分组,然后对结果进行排序:
SELECT cpd.productId, SUM(cpd.paymentSplitAmount), DATE_FORMAT(cp.paymentDate, '%b-%Y')
FROM campaign_payment_detail cpd
JOIN campaign_payment cp ON cp.paymentId = cpd.paymentId
JOIN product ON cpd.productId = product.productId
WHERE cp.campaignId = 2413
GROUP BY cpd.productId, DATE_FORMAT(cp.paymentDate, '%b-%Y')
ORDER BY cp.paymentDate DESC, cpd.productId ASC
编辑:使用DATE_格式按照您的需要设置日期格式。首先,根据您提供的查询,如果没有其他信息,表产品将无效 我会这样做:
select
cpd.paymentId,
SUM(cpd.paymentSplitAmount) as total,
cp.campaignId,
cp.paymentDate
from campaign_payment_detail cpd
inner join
campaign_payment cp on cp.paymentId = cpd.paymentId
where
cp.campaignId = 2413
GROUP BY cpd.productId, cp.paymentDate
ORDER BY cpd.paymentId ASC, cp.paymentDate DESC
这不会产生预期的结果:(这是因为对月份进行了分组,就像我在上一句中告诉你的那样。请参阅编辑。这非常接近。特别是如果你将productId添加到select语句中。问题是它只显示10月份的数据,而忽略了1月份的数据。我不知道你的表结构如何,请尝试读取我删除的内部联接…:)我们赢了!非常感谢,这太完美了!
SELECT cpd.productId, SUM(cpd.paymentSplitAmount), DATE_FORMAT(cp.paymentDate, '%b-%Y')
FROM campaign_payment_detail cpd
JOIN campaign_payment cp ON cp.paymentId = cpd.paymentId
JOIN product ON cpd.productId = product.productId
WHERE cp.campaignId = 2413
GROUP BY cpd.productId, DATE_FORMAT(cp.paymentDate, '%b-%Y')
ORDER BY cp.paymentDate DESC, cpd.productId ASC
select
cpd.paymentId,
SUM(cpd.paymentSplitAmount) as total,
cp.campaignId,
cp.paymentDate
from campaign_payment_detail cpd
inner join
campaign_payment cp on cp.paymentId = cpd.paymentId
where
cp.campaignId = 2413
GROUP BY cpd.productId, cp.paymentDate
ORDER BY cpd.paymentId ASC, cp.paymentDate DESC