我在表中有三列“名称”、“交易”和“分数”。数据示例:
name trade score
name1 trade1 10
name2 trade1 5
name3 trade1 20
name4 trade1 15
Run Code Online (Sandbox Code Playgroud)
我想得到带有名称、状态的结果,其中状态可以具有三个值之一,即“平均”、“高于平均”和“低于平均”。其中平均值是“分数”列的平均值。现在根据以上数据,平均分是 12.5。所以预期的结果将是这样的:
name status
name1 below average
name2 below average
name3 above average
name4 above average
Run Code Online (Sandbox Code Playgroud)
我不确定这是否可以通过单个查询或某些存储过程或函数来实现。请建议。
您可以使用以下查询:
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
Run Code Online (Sandbox Code Playgroud)