Запрос в MySQL

Есть запрос, в котором вычисляется некоторое значение, используя CASE, например:

SELECT (CASE WHEN a.id > 500 THEN a.id ELSE a.id + 500 END) as new_column FROM table a;

Как использовать значение new_column для вычисления еще одного значения? Т.е. что-то типа:

SELECT (CASE WHEN a.id > 500 THEN a.id ELSE a.id + 500 END) as new_column, (CASE WHEN new_column < 1000 THEN new_column ELSE new_column + 1000) as new_column2 FROM table a;

На такой запрос MySQL ругается, говорит, что Column not found: 1054 Unknown column 'new_column' in 'field list'
  • Вопрос задан
  • 2609 просмотров
Пригласить эксперта
Ответы на вопрос 6
@edogs
используйте полноформатную запись (CASE WHEN a.id > 500 THEN a.id ELSE a.id + 500 END) вместо new_column
альясы поддерживаются только в having выражении, в where их поддержки нет
на производительности это не скажется, при условии что полноформатку будете дублировать символ в символ включая рЕгИСтр.
Ответ написан
Wott
@Wott
SELECT new_column, (CASE WHEN new_column < 1000 THEN new_column ELSE new_column + 1000 END) as new_column2 FROM (SELECT (CASE WHEN a.id > 500 THEN a.id ELSE a.id + 500 END) as new_column FROM table as a) as b
Ответ написан
@IlVin
-- Не эффективный способ, но приемлемый на маленьких выборках B
SELECT 
  B.new_column,
  IF(B.new_column < 1000, B.new_column, B.new_column + 1000) AS new_column2
FROM (
  SELECT IF(a.id > 500, a.id, a.id + 500) as new_column
  FROM table a
) AS B;

-- А можно и так...
SELECT
  (a.id + IF(a.id < 500, 500, 0)) as new_column,
  (a.id + IF(a.id > 1000, 1000, 0)) as new_column2
FROM table a
Ответ написан
Комментировать
twistr
@twistr Автор вопроса
Спасибо за ответ. Дело в том, что выражение достаточно длинное (5 строк), но раз другого выхода нет…
Ответ написан
Комментировать
twistr
@twistr Автор вопроса
Всем спасибо!
Ответ написан
Комментировать
taliban
@taliban
php программист
Используйте ифы и переменные вместо кейсов, это сократит дублирование, в первый раз все вычисляете и пишете в переменную, во второй раз используйте переменную вместо всего выражения
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы