我想用平均列来计算字母等级。
我尝试使用此代码执行此操作:
UPDATE students
SET letter_grade='BA'
WHERE (average- (select AVG(average)from students )) > 20
AND (average-(select AVG(average)from students)) < 25;
但它会出现以下错误:you cant specify target table 'students' for update if FROM clause.
似乎mysql不允许通过使用同一个表中的select来更新表。我该如何解决这个问题?
答案 0 :(得分:1)
试试这个
UPDATE students
SET letter_grade='BA'
GROUP BY average HAVING (average - avg(average)) > 20
AND (average - avg(average)) < 25
答案 1 :(得分:0)
您可以选择临时表: Create a temporary table in a SELECT statement without a separate CREATE TABLE 然后使用临时选择进行更新。
CREATE TEMPORARY TABLE avgs( select students.id, average-AVG(average) as a from students);
UPDATE students SET letter_grade='BA'
WHERE EXISTS (SELECT a FROM avgs
WHERE students.id =avgs.id AND -20 < a AND a < 25);
答案 2 :(得分:0)
或者将其作为两个查询,例如
declare average_average float
set average_average = AVG(average) from students
Update students Set Letter_grade = 'BA'
where (average - average_average) > 20 and (average - average_average) < 25
假设平均值是浮点字段