Исправьте этот запрос - PullRequest
0 голосов
/ 25 января 2012

Почему запрос не работает

SELECT (sum(`result` = 1)/count(id) * 100) as `abc`,  
case 
  when `abc` > 80 then 'pass'
  when `abc` < 80 then 'fail'
end as `abcd` 
FROM `user_quiz_answers` WHERE `user_quiz_id` = 39

Таблица:

id          int(11)         AUTO_INCREMENT                                  
question_id     int(11)                                             
result      tinyint(1)

ОШИБКА:

#1054 - Unknown column 'abc' in 'field list'

Мне удалось это, но не выше

SELECT 
case 
  when (sum(`result` = 1)/count(id) * 100) > 80 then 'pass' 
  when (sum(`result` = 1)/count(id) * 100) < 80 then 'fail' 
end as `abcd` 
FROM `user_quiz_answers` WHERE `user_quiz_id` = 39

1 Ответ

3 голосов
/ 25 января 2012

Поскольку вы не можете использовать псевдонимы столбцов в качестве имен столбцов в одном запросе.Что-то вроде этого будет работать

SELECT
  `abc`,
  case 
    when `abc` > 80 then 'pass'
    when `abc` < 80 then 'fail'
  end as `abcd` 
FROM (
  SELECT (sum(`result` = 1)/count(id) * 100) as `abc`
  FROM `user_quiz_answers` WHERE `user_quiz_id` = 39
) AS sq

Другой, более простой способ сделать то, что вы хотите сделать, будет:

SELECT 
  IF((sum(`result` = 1)/count(id) * 100) > 80, 'pass','fail') as `abcd`
FROM `user_quiz_answers` WHERE `user_quiz_id` = 39
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...