결과 중 하나를 두 번 실행하지 않고 테스트 할 때 케이스를 만들 수있는 방법이 있습니까?
-
21-08-2019 - |
문제
선택 문을 두 번 쓰지 않고 테스트 할 때 케이스의 값을 사용하는 방법이 있습니까 (길고 지저분 할 수 있기 때문에)? 예를 들어:
SELECT id,
CASE WHEN (
(SELECT MAX(value) FROM my_table WHERE other_value = 1) IS NOT NULL
)
THEN (
SELECT (MAX(value) FROM my_table WHERE other_value = 1
)
ELSE 0
END AS max_value
FROM other_table
Select 문 (테스트의 경우)의 첫 번째 실행 결과를 당시 값으로 사용할 수있는 방법이 있습니까? 첫 번째 선택 후 "AS Max_Value"를 사용하려고 시도했지만 SQL 오류가 발생했습니다.
업데이트: Tom H.가 지적했듯이, 나는 원래 질문에서 "널이 아니라고 잊어 버렸습니다.
해결책
이 예제는 하위 퀘스트에서 많은 값을 준비하고 외부 선택의 경우에 사용하는 방법을 보여줍니다.
select
orderid,
case when maxprice is null then 0 else maxprice end as maxprice
from (
select
orderid = o.id,
maxprice = (select MAX(price) from orderlines ol
where ol.orderid = o.id)
from orders o
) sub
그것이 당신이 추구하는지 확실하지 않으면 질문이 불분명합니다 (예 : 2 max () 쿼리는 정확한 사본 인 것 같습니다.)
다른 팁
당신의 진술은 심지어 실행됩니까? 당신의 사례 진술에서 부울 표현이 아닙니다. 부울을 사용하지 않으면 mySQL 기본값이 NULL 값을 확인하는 데 기본값이 있습니까?
나는 이것이 당신이 찾고있는 것일 것이라고 생각합니다.
SELECT
id,
COALESCE(
(
SELECT
MAX(value)
FROM
My_Table
WHERE
other_value = 1
), 0) AS max_value
FROM
Other_Table
제휴하지 않습니다 StackOverflow