MySQL使用WHERE和GROUP BY年(),月()的2列的平均值
问题描述:
使用MySQL。如何按年份(my_date)和月份(my_date)分组时查找min_amount和max_amount列的平均值?MySQL使用WHERE和GROUP BY年(),月()的2列的平均值
目前我打算将列的总和放在一个数组中,然后使用PHP对它们进行平均。
有没有办法用SQL查询来取得2个分组列的平均值?
$sql = "SELECT
SUM(min_amount) AS sum_min_amount,
SUM(max_amount) AS sum_max_amount,
my_date
FROM
table_1
WHERE
name = '$name'
AND
year(my_date) BETWEEN '$start_year' AND '$end_year'
AND
month(my_date) BETWEEN '$start_month' AND '$end_month'
GROUP BY
year(my_date), month(my_date)";
答
MySQL有内置在average function,所以应该没有必要做的事情PHP端以此计算,除非你有一个不能在查询中轻松地表达了一些丑陋的业务需求。
SELECT YEAR(my_date) AS year,
MONTH(my_date) AS month,
AVERAGE(min_amount) AS min_avg,
AVERAGE(max_amount) AS max_avg
FROM table_1
WHERE (my_date >= "$start_year-$start_month-01")
AND (my_date <= "$end_year-$end_month-31")
AND (name = $name)
GROUP BY year, month
你可能要正确地构建查询以外的数据串,和最肯定使用准备好的声明这一点,因为通常的“你对SQL注入大开”的攻击在这里举行。
您知道,如果您提供2009年至2010年的开始和结束年份,月份值为1和4 - 您只能获得两年前四个月的值? – 2010-11-08 17:20:06
谢谢,我没有意识到这一点。我试图在两个日期之间获得一个月的平均值;这可能会跨越多年。什么是更好的方式来做到这一点? – Mark 2010-11-08 17:27:22
“my_date”列的数据类型是什么?理想情况下,它应该是DATE,DATETIME或TIMESTAMP之一 – 2010-11-08 18:28:07