programing

SELECT... GROUP BY 쿼리에서 반복 방지

prostudy 2022. 10. 3. 15:23
반응형

SELECT... GROUP BY 쿼리에서 반복 방지

마리아DB 10.3.29를 작업 중입니다.

다음과 같은 질문이 있습니다(이 예에서는 간략화).

SELECT
    MIN(IF(v > 0, v, v*100)) AS min,
    MAX(IF(v > 0, v, v*100)) AS max
FROM tab
WHERE someCondition = 0
GROUP BY someGroup;

이 같은 일이 반복되지 않도록 하고 싶다.IF(v > 0, v, v*100)(캐시된 경우에도) 큰 쿼리에 상당한 부하가 추가될 수 있습니다.내가 틀렸을 수도 있고 마리아DB는 반복하지 않을 만큼 똑똑할 수도 있다.어쨌든 가능하면 피하고 싶어요.

나는 다음과 같은 것을 시도했다.

SELECT
    IF(v > 0, v, v*100) as val
    MIN(val) AS min,
    MAX(val) AS max
FROM tab
WHERE someCondition = 0
GROUP BY someGroup;

단, 이 동작은 I dought I dought I doiceGROUP BY집약 함수를 사용하려면 보유해야 합니다.임시 테이블을 사용하는 것이 좋습니까? 만약 그렇다면 어떻게 해야 합니까?

쿼리 옵티마이저는 한 행에 한 번만 계산할 수 있을 정도로 스마트합니다.설명 계획을 보면 그것이 무엇을 하고 있는지 알 수 있을 것이다.

CTE를 사용해 볼 수도 있지만, 옵티마이저는 원래 SQL과 동일한 쿼리를 실행할 수 있습니다.

with T1 as (
   SELECT
   IF(v > 0, v, v*100) as val, 
   other_columns…
   FROM tab
   WHERE someCondition = 0
)
SELECT min(val), max(val)
from T1…

언급URL : https://stackoverflow.com/questions/69710441/avoid-repetition-in-select-group-by-query

반응형