在MySQL中平均某个列的值
我有以下表格结构:在MySQL中平均某个列的值,mysql,sql,select,Mysql,Sql,Select,我有以下表格结构: id | code | rating 1 | 300 | 25 2 | 302 | 35 3 | 100 | 50 4 | 100 | 30 5 | 200 | 40 6 | 103 | 45 以下是我目前的疑问: 选择编码,按编码从表组中选择 我想平均所有大于300的代码的评级。我尝试在SQL查询上设置IF,但似乎不起作用。也尝试过两次分组,但都不起作用。我想达到这个结果: code | AVG (rat
id | code | rating
1 | 300 | 25
2 | 302 | 35
3 | 100 | 50
4 | 100 | 30
5 | 200 | 40
6 | 103 | 45
以下是我目前的疑问:
选择编码,按编码从表组中选择
我想平均所有大于300的代码的评级。我尝试在SQL查询上设置IF,但似乎不起作用。也尝试过两次分组,但都不起作用。我想达到这个结果:
code | AVG (rating)
300+ (alias) | 30
100 | 40
200 | 40
103 | 45
分组时的用例:
这是一把小提琴
注意:这将在MySQL中工作,但由于300+是字符串,所以更严格的方法应该首先将代码强制转换为varchar:
您可以尝试上面的代码。您可以使用大小写表达式将大于300的所有代码组合在一起:
SELECT CASE WHEN code >= 300 THEN '300+'
ELSE CAST(code AS CHAR)
END,
AVG(rating)
FROM table
GROUP BY CASE WHEN code >= 300 THEN '300+'
ELSE CAST(code AS CHAR)
END
根据上述问题中提到的描述,请尝试执行以下SQL select查询作为解决方案
select code,avg(rating) from table where code < 300 group by code
union
select code,avg(rating) from table where code >= 300
SELECT CODE,AVG(rating) FROM
(
SELECT CASE WHEN code >= 300 THEN '300+' ELSE CODE END AS CODE, rating FROM table
)Z
GROUP BY code;
SELECT CASE WHEN code >= 300 THEN '300+'
ELSE CAST(code AS CHAR)
END,
AVG(rating)
FROM table
GROUP BY CASE WHEN code >= 300 THEN '300+'
ELSE CAST(code AS CHAR)
END
select code,avg(rating) from table where code < 300 group by code
union
select code,avg(rating) from table where code >= 300