결과 중 하나를 두 번 실행하지 않고 테스트 할 때 케이스를 만들 수있는 방법이 있습니까?

StackOverflow https://stackoverflow.com/questions/854747

  •  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
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top