mysql - 如何在mysql查询列中打印基于条件的值

标签 mysql sql average

我在表中有三列“名称”、“交易”和“分数”。 数据示例:

name    trade     score
name1   trade1     10
name2   trade1     5
name3   trade1     20
name4   trade1     15

我想得到带有名称、状态的结果,其中状态可以具有三个值之一,即“平均”、“高于平均”和“低于平均”。其中平均值是“分数”列的平均值。现在根据以上数据,平均分是12.5。 所以预期的结果将是这样的:

name     status
name1    below average
name2    below average
name3    above average
name4    above average

我不确定这是否可以通过单个查询或某些存储过程或函数来实现。请提出建议。

最佳答案

您可以使用以下查询:

SELECT name,
       IF (total_score < average_score, 'below average',
          IF(total_score > average_score, 'above average', 'average')) AS status
FROM (          
  SELECT name, 
         SUM(score) AS total_score, 
         (SELECT AVG(score) FROM mytable) AS average_score
  FROM mytable
  GROUP BY name ) AS t

Demo here

关于mysql - 如何在mysql查询列中打印基于条件的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35580572/

相关文章:

mysql - 检查 SQL 中是否存在值,如果不返回另一行

mysql - Sql 触发器不工作但不给出任何错误

sql - 我们如何才能获得所有用户名列表而不是使用 django ORM 的用户对象

mysql - 如何从 MySql 的查询中排除特定行

r - 在 R 与 sum(Dataframe$columns)/N 中使用聚合函数有何不同?

r - 如何按列最好地规范化 R 中的数据框?

php - 命令不同步;您现在无法使用 mysql 存储过程在 SugarCRM 中运行此命令

mysql - SQL查询根据父级获取子级用户的金额总和

MySQL 按多个平均和不同条件进行分组

php - PDO PHP 字符串输入以数字 ("2abcd"开始)在 $stmt->bindParam ("2", $id) 中被修剪为只有数字 (':id' );