MySql AVG() 和 WHERE
MySql AVG() and WHERE
我正在为如何编写此查询而苦苦挣扎,无法找到对我的案例有帮助的答案。
考虑以下 table:
-----------------------------------------------
| ID | Value1 | Value2 | Value3 | Date |
-----------------------------------------------
| 1 | 10 | 23 | 30 | 2015-01-01 |
-----------------------------------------------
| 1 | 11 | 33 | 40 | 2015-02-01 |
-----------------------------------------------
| 2 | 26 | 93 | 20 | 2015-01-01 |
-----------------------------------------------
| 2 | 11 | 33 | 50 | 2015-02-01 |
-----------------------------------------------
我想检索日期为 2015-01-01 的 Value1 的平均值
我以为
SELECT AVG(PAM_1) FROM MyTable WHERE DATE = 2015-01-01
可以,但当然不行。我知道我可能需要使用 HAVING 但我很困惑是否还必须使用 GROUP BY 以及是否需要 AS(某物)部分。
编辑
问题与查询无关。我通过这样的变量提供日期:
$sth = $db->prepare("SELECT AVG(Value1) FROM MyTable WHERE DATE = $date");
准备好的语句无法做到这一点。
您的查询基本没问题。你的日期常数不是。日期常量应该用单引号引起来:
SELECT AVG(PAM_1)
FROM MyTable
WHERE DATE = '2015-01-01';
如果日期可以包含时间部分,那么以下是处理此问题的最佳方法:
SELECT AVG(PAM_1)
FROM MyTable
WHERE DATE >= '2015-01-01' AND DATE < '2015-01-02';
我正在为如何编写此查询而苦苦挣扎,无法找到对我的案例有帮助的答案。
考虑以下 table:
-----------------------------------------------
| ID | Value1 | Value2 | Value3 | Date |
-----------------------------------------------
| 1 | 10 | 23 | 30 | 2015-01-01 |
-----------------------------------------------
| 1 | 11 | 33 | 40 | 2015-02-01 |
-----------------------------------------------
| 2 | 26 | 93 | 20 | 2015-01-01 |
-----------------------------------------------
| 2 | 11 | 33 | 50 | 2015-02-01 |
-----------------------------------------------
我想检索日期为 2015-01-01 的 Value1 的平均值
我以为
SELECT AVG(PAM_1) FROM MyTable WHERE DATE = 2015-01-01
可以,但当然不行。我知道我可能需要使用 HAVING 但我很困惑是否还必须使用 GROUP BY 以及是否需要 AS(某物)部分。
编辑
问题与查询无关。我通过这样的变量提供日期:
$sth = $db->prepare("SELECT AVG(Value1) FROM MyTable WHERE DATE = $date");
准备好的语句无法做到这一点。
您的查询基本没问题。你的日期常数不是。日期常量应该用单引号引起来:
SELECT AVG(PAM_1)
FROM MyTable
WHERE DATE = '2015-01-01';
如果日期可以包含时间部分,那么以下是处理此问题的最佳方法:
SELECT AVG(PAM_1)
FROM MyTable
WHERE DATE >= '2015-01-01' AND DATE < '2015-01-02';