我有一个捐赠数据库,在我针对该数据库运行的一份报告中,我想包含等于月份最大捐赠的捐赠数量。例如,月份最高捐款可能是 100 美元,但可能有 5 个人都捐款了 100 美元,我想知道这个数字。
我当前的查询是:
SELECT SUM(mc_gross) AS Donations,
SUM(mc_fee) AS Fees,
COUNT(payment_date) AS DontationCount,
COUNT(DISTINCT payer_email) AS DonatorCount,
MAX(mc_gross) AS MaxDonation,
@MaxD:=MAX(mc_gross),
(
SELECT COUNT(*)
FROM #__paypal_donations
WHERE MONTH(payment_date) = MONTH(CURDATE())
AND YEAR(payment_date) = YEAR(CURDATE())
AND mc_gross = @MaxD
) as MaxDonationMultiplier,
AVG(mc_gross) AS AverageDonation
FROM #__paypal_donations
WHERE MONTH(payment_date) = MONTH(CURDATE())
AND YEAR(payment_date) = YEAR(CURDATE())
所以我想我可能已经接近了,但看起来我存储在 @MaxD 中用于子查询的值不起作用,或者 mc_gross = @MaxD 中的比较本身不起作用,因为如果我替换 @MaxD有了实际值,我就得到了正确的计数。
最佳答案
您不能依赖 MySQL 中表达式的赋值顺序。这使得像你这样的查询非常危险。幸运的是,您可以使用相关子查询轻松解决此问题:
SELECT SUM(mc_gross) AS Donations, SUM(mc_fee) AS Fees, COUNT(payment_date) AS DontationCount,
COUNT(DISTINCT payer_email) AS DonatorCount, MAX(mc_gross) AS MaxDonation,
(SELECT COUNT(*)
FROM #__paypal_donations pd2
WHERE MONTH(pd2payment_date) = MONTH(pd.payment_date)) AND
YEAR(pd2payment_date) = YEAR(pd.payment_date) AND
pd2.mc_gross = MAX(mc_gross)
) as MaxDonationMultiplier,
AVG(mc_gross) AS AverageDonation
FROM #__paypal_donations pd
WHERE MONTH(payment_date) = MONTH(CURDATE()) AND
YEAR(payment_date) = YEAR(CURDATE());
关于mysql - COUNT() MySQL 中 MAX() 出现的次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27742002/