Можно ли использовать CASE с WHERE? - PullRequest
2 голосов
/ 28 июня 2010

Попытка сделать это:

SELECT CASE WHEN field = true THEN one * another ELSE one END as case_field 
FROM table WHERE case_field >= 9000

и получить сообщение об ошибке, что case_field не существует.

Возможно ли это сделать без дублирования CASE?

Ответы [ 2 ]

7 голосов
/ 28 июня 2010

Похоже, что PostgresSQL поддерживает производные таблицы

SELECT * FROM 
(
SELECT CASE WHEN field = true THEN one * another ELSE one END as case_field 
FROM table 
) AS derived
WHERE case_field >= 9000

Возможно, вы захотите убедиться, что это не оказывает какого-либо негативного влияния на план выполнения.

0 голосов
/ 28 июня 2010

Использовать временную таблицу:

SELECT *
FROM (
     SELECT 
        CASE WHEN field = true THEN one * another
        ELSE one
        END as case_field 
        FROM table
     ) a
 WHERE a.case_field >= 9000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...