2010-11-08 274 views
0

使用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)"; 
+0

您知道,如果您提供2009年至2010年的開始和結束年份,月份值爲1和4 - 您只能獲得兩年前四個月的值? – 2010-11-08 17:20:06

+0

謝謝,我沒有意識到這一點。我試圖在兩個日期之間獲得一個月的平均值;這可能會跨越多年。什麼是更好的方式來做到這一點? – Mark 2010-11-08 17:27:22

+0

「my_date」列的數據類型是什麼?理想情況下,它應該是DATE,DATETIME或TIMESTAMP之一 – 2010-11-08 18:28:07

回答

0

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注入大開」的攻擊在這裏舉行。