Mysql 如何根据其他两列的具体情况计算一列的平均值?

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年的

我为这个令人费解的标题道歉,因为我是SQL新手,不知道如何问得更好

基本上我有一个很大的表,有很多列。我需要找到任何选定列的值的平均值,但前提是该行的ID具有特定日期

例如,我编写了这个简单的查询来查找按日期列出的列的平均值

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  |