Sql server 2012 在具有多个不同条件的表中计算多个平均值
我试图计算表中多个列的平均值,并试图根据where子句施加规则来计算此平均值。由于这些列中的大多数没有不同的值,因此无法使用GROUPBY子句来获得正确的结果。包含所有条件的简单where子句无法正确计算平均值。这个问题有解决办法吗 我的桌子看起来像Sql server 2012 在具有多个不同条件的表中计算多个平均值,sql-server-2012,Sql Server 2012,我试图计算表中多个列的平均值,并试图根据where子句施加规则来计算此平均值。由于这些列中的大多数没有不同的值,因此无法使用GROUPBY子句来获得正确的结果。包含所有条件的简单where子句无法正确计算平均值。这个问题有解决办法吗 我的桌子看起来像 col1 col2 col3 col4 0 -3 0 109 3 2 -1 -108 -4 -1 3 3 2 0 4 2 2 1
col1 col2 col3 col4
0 -3 0 109
3 2 -1 -108
-4 -1 3 3
2 0 4 2
2 1 107 -2
我在这里的目的是根据规则计算每列的平均值。对于ex:avg(col1)应包括0到100之间的值,avg(col2)应包括-1到-100之间的值,avg(col3)应包括0到100之间的值,
平均值(col4)应包括-1到-100之间的值
select avg(col1), avg(col2), avg(col3), avg(col4) from tbl1
where (col1 between 0 and 100) and (col1 between -1 and -100) and (col3 between 0 and 100) and (col4 between -1 and -100)
以下解决方案应该可以实现您的目标。首先,我们使用一些CTE(子查询)将列中的值限制为我们想要的值,然后得到它们的平均值
WITH
first_col AS
(
SELECT col1
FROM the_table
WHERE col1 >= 0 and col1 <= 100
),
second_col AS
(
SELECT col2
FROM the_table
WHERE col2 >= -100 and col2 <= -1
),
third_col AS
(
SELECT col3
FROM the_table
WHERE col3 >= 0 and col3 <= 100
),
fourth_col AS
(
SELECT col4
FROM the_table
WHERE col4 >= -100 and col4 <= -1
)
SELECT
AVG(first_col.col1),
AVG(second_col.col2),
AVG(third_col.col3),
AVG(fourth_col.col4)
FROM
first_col,
second_col,
third_col,
fourth_col
或者,您可以使用此查询来避免使用CTE
SELECT
AVG(CASE WHEN col1 >= 0 AND col1 <= 100 THEN col1 END) AS col1avg,
AVG(CASE WHEN col2 >= -100 AND col2 <= -1 THEN col2 END) AS col2avg,
AVG(CASE WHEN col3 >= 0 AND col3 <= 100 THEN col3 END) AS col3avg,
AVG(CASE WHEN col4 >= -100 AND col4 <= -1 THEN col4 END) AS col4avg
FROM
the_table
- 注意-这假定您希望值包含在内,因为
语句是包含在内的BETWEEN
CTE
@KaramGlad来听它的帮助@卡拉姆
SELECT
AVG(CASE WHEN col1 >= 0 AND col1 <= 100 THEN col1 END) AS col1avg,
AVG(CASE WHEN col2 >= -100 AND col2 <= -1 THEN col2 END) AS col2avg,
AVG(CASE WHEN col3 >= 0 AND col3 <= 100 THEN col3 END) AS col3avg,
AVG(CASE WHEN col4 >= -100 AND col4 <= -1 THEN col4 END) AS col4avg
FROM
the_table
1 -2 2 -2