> 데이터 베이스 > MySQL 튜토리얼 > 동일한 SELECT 문에서 열 별칭을 사용할 수 없는 이유는 무엇입니까?

동일한 SELECT 문에서 열 별칭을 사용할 수 없는 이유는 무엇입니까?

Linda Hamilton
풀어 주다: 2025-01-14 08:16:43
원래의
670명이 탐색했습니다.

Why Can't I Use Column Aliases in the Same SELECT Statement?

SQL 쿼리의 열 별칭을 동일한 SELECT 문에서 재사용할 수 없다는 설명

주어진 SQL 쿼리에서 SELECT 문 뒤의 표현식(ROUND(avg_time * cnt, 2))에 열 별칭(avg_time 및 cnt)을 사용해 보세요. 그러나 후속 SELECT 표현식에서는 열 별칭에 액세스할 수 없기 때문에 오류가 발생합니다.

이러한 제한은 SQL 엔진이 쿼리를 처리하는 순서로 인해 발생합니다. SELECT 문이 먼저 실행되고 이 단계에서 별칭이 생성됩니다. 그러나 후속 표현식은 나중에 처리되며 이때 별칭은 아직 정의되지 않습니다.

해결책: 하위 쿼리 사용

이 제한 사항을 해결하기 위해 하위 쿼리를 사용할 수 있습니다. 하위 쿼리는 다른 쿼리 내에 포함된 별도의 쿼리입니다. 이 경우 하위 쿼리를 사용하여 별칭을 만든 다음 외부 쿼리에서 액세스할 수 있습니다.

다음 쿼리는 하위 쿼리를 사용하여 원래 쿼리를 캡슐화하고 외부 레이어에서 열 별칭을 사용할 수 있도록 합니다.

<code class="language-sql">SELECT stddev_time, max_time, avg_time, min_time, cnt, ROUND(avg_time * cnt, 2) as slowdown
FROM (
        SELECT 
            COALESCE(ROUND(stddev_samp(time), 2), 0) as stddev_time, 
            MAX(time) as max_time, 
            ROUND(AVG(time), 2) as avg_time, 
            MIN(time) as min_time, 
            COUNT(path) as cnt, 
            path
        FROM 
            loadtime
        GROUP BY
            path
        ORDER BY
            avg_time DESC
        LIMIT 10
   ) X;</code>
로그인 후 복사

이 쿼리에서 하위 쿼리(괄호 안)는 열 별칭 stddev_time, max_time, avg_time, min_time 및 cnt를 생성합니다. 그런 다음 외부 쿼리는 오류 없이 ROUND(avg_time * cnt, 2) 표현식에 사용되는 별칭 avg_time을 포함하여 하위 쿼리에서 열을 선택합니다.

위 내용은 동일한 SELECT 문에서 열 별칭을 사용할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿