Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MySQL中平均某个列的值_Mysql_Sql_Select - Fatal编程技术网

在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