> 데이터 베이스 > MySQL 튜토리얼 > SQL WHERE 절에서 계산된 열을 어떻게 사용할 수 있나요?

SQL WHERE 절에서 계산된 열을 어떻게 사용할 수 있나요?

Barbara Streisand
풀어 주다: 2025-01-21 17:52:10
원래의
605명이 탐색했습니다.

How Can I Use Calculated Columns in SQL WHERE Clauses?

SQL WHERE 절 및 계산 열: 일반적인 함정

SQL에서는 날짜 차이 등 열과 관련된 계산을 기반으로 데이터를 필터링해야 하는 경우가 많습니다. 그러나 WHERE 절 내에서 열 별칭을 직접 사용하면 "잘못된 열 이름" 오류가 자주 발생합니다. 이는 SQL이 SELECT전에 WHERE 문을 처리하기 때문입니다. 이는 WHERE 절에서 별칭을 사용하려고 할 때 별칭이 아직 정의되지 않았음을 의미합니다.

다음 예를 고려해보세요.

<code class="language-sql">SELECT logcount, logUserID, maxlogtm,
       DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiff
FROM statslogsummary
WHERE daysdiff > 120;</code>
로그인 후 복사

실패합니다.

두 가지 효과적인 솔루션은 다음과 같습니다.

1. 하위 쿼리(또는 괄호): 값 사전 계산

SQL이 계산을 먼저 평가하도록 하려면 계산을 괄호로 묶으세요.

<code class="language-sql">SELECT logcount, logUserID, maxlogtm,
       DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiff
FROM statslogsummary
WHERE (DATEDIFF(day, maxlogtm, GETDATE()) > 120);</code>
로그인 후 복사

괄호는 하위 쿼리를 생성하여 daysdiff 절에 WHERE을 사용할 수 있도록 합니다.

2. 공통 테이블 표현식(CTE): 임시 테이블 정의

CTE는 명명된 임시 결과 집합을 제공하므로 계산된 열을 보다 명확하게 참조할 수 있습니다.

<code class="language-sql">WITH logDiff AS (
   SELECT logcount, logUserID, maxlogtm,
          DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiff
   FROM statslogsummary
)
SELECT logcount, logUserID, maxlogtm, daysdiff
FROM logDiff
WHERE daysdiff > 120;</code>
로그인 후 복사

CTE logDiffdaysdiff을 미리 계산하여 기본 쿼리의 WHERE 절에서 액세스할 수 있도록 합니다. 이 접근 방식은 특히 복잡한 계산의 경우 가독성과 유지 관리성을 향상시킵니다.

위 내용은 SQL WHERE 절에서 계산된 열을 어떻게 사용할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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