Mysql 如何根据其他两列的具体情况计算一列的平均值?
我为这个令人费解的标题道歉,因为我是SQL新手,不知道如何问得更好 基本上我有一个很大的表,有很多列。我需要找到任何选定列的值的平均值,但前提是该行的ID具有特定日期 例如,我编写了这个简单的查询来查找按日期列出的列的平均值Mysql 如何根据其他两列的具体情况计算一列的平均值?,mysql,sql,Mysql,Sql,我为这个令人费解的标题道歉,因为我是SQL新手,不知道如何问得更好 基本上我有一个很大的表,有很多列。我需要找到任何选定列的值的平均值,但前提是该行的ID具有特定日期 例如,我编写了这个简单的查询来查找按日期列出的列的平均值 SELECT AVG(Col6), date FROM Schema.Table WHERE date = 2019 这将返回日期列中包含2019的所有日期的Col6的平均值 日期栏中有两年(2019年和2020年)。有些ID没有2019年的数据,有些ID没有2020年的
SELECT AVG(Col6), date
FROM Schema.Table
WHERE date = 2019
这将返回日期列中包含2019的所有日期的Col6的平均值
日期栏中有两年(2019年和2020年)。有些ID没有2019年的数据,有些ID没有2020年的数据
我想写一个查询,如果一个ID有2020年的日期和2019年的日期,它基本上只给我Col6的平均值,但我不确定我会怎么做
任何帮助都将不胜感激 为了检查两个年份中是否存在日期,可以使用内部联接,如中所示:
SELECT AVG(Col6), date
FROM Schema.Table
WHERE (date = 2019 or date = 2020), you can also group them using group by, but I guess that date is or 2019 or 2020, because it can't be at the same time both values
select a.date, avg(a.col6)
from schema.table a
join schema.table b on b.id = a.id
where a.date = 2019 and b.date = 2020
您可以使用或其他类似的分组来分隔分组返回的行。可以选择使用汇总,以包括总平均值。使用WHERE
限制平均数据
例子:
除了在
之间使用(检索范围)之外,还可以使用IN()
仅限制特定日期
WHERE `date` IN('2019', '2020')
数据
CREATE TABLE table1 (
`Col6` INTEGER,
`date` INTEGER
);
INSERT INTO table1
(`Col6`, `date`)
VALUES
('1', '2020'),
('2', '2020'),
('1', '2019'),
('1', '2019'),
('1', '2018'),
('1', NULL);
结果
| avg_col6 | date |
| -------- | ----- |
| 1.0000 | 2019 |
| 1.5000 | 2020 |
| 1.2500 | Total |
如果不指定分组依据
,日期
列值将变得不明确,并可能返回子集内的“任何值”,因此不应依赖该值
服务器可以从每个组中自由选择任何值,因此除非
如果相同,则选择的值是不确定的,即
可能不是你想要的
结果
| avg_col6 | date |
| -------- | ----- |
| 1.0000 | 2019 |
| 1.5000 | 2020 |
| 1.2500 | Total |
注:2020年可能不会实际返回
请发布您的表架构、示例数据和预期输出。
SELECT
AVG(`Col6`) AS avg_col6,
ANY_VALUE(`date`) AS date
FROM `table1`
WHERE `date` IN('2019', '2020')
| avg_col6 | date |
| -------- | ----- |
| 1.2500 | 2020 |