

 Amazon Redshift는 패치 198부터 새 Python UDF 생성을 더 이상 지원하지 않습니다. 기존 Python UDF는 2026년 6월 30일까지 계속 작동합니다. 자세한 내용은 [블로그 게시물](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)을 참조하세요.

# Expressions
<a name="r_expressions"></a>

**Topics**
+ [단순 표현식](#r_expressions-simple-expressions)
+ [복합 표현식](r_compound_expressions.md)
+ [표현식 목록](r_expression_lists.md)
+ [스칼라 하위 쿼리](r_scalar_subqueries.md)
+ [함수 표현식](r_function_expressions.md)

표현식이란 하나 이상의 값, 연산자 또는 값으로 평가되는 함수의 조합을 말합니다. 표현식의 데이터 형식은 일반적으로 구성하는 각 요소의 데이터 형식과 일치합니다.

## 단순 표현식
<a name="r_expressions-simple-expressions"></a>

단순 표현식은 다음과 같습니다.
+ 상수 또는 리터럴 값 
+ 열 이름 또는 열 참조 
+ 스칼라 함수 
+ 집계(집합) 함수 
+ 창 함수 
+ 스칼라 하위 쿼리 

단순 표현식의 예는 다음과 같습니다.

```
5+12
dateid
sales.qtysold * 100
sqrt (4)
max (qtysold)
(select max (qtysold) from sales)
```

# 복합 표현식
<a name="r_compound_expressions"></a>

복합 표현식이란 연속된 단순 표현식이 산술 연산자로 결합되어 있는 것을 말합니다. 복합 표현식에 사용되는 단순 표현식은 숫자 값을 반환해야 합니다.

## 구문
<a name="r_compound_expressions-synopsis"></a>

```
expression 
operator 
expression | (compound_expression)
```

## 인수
<a name="r_compound_expressions-arguments"></a>

 * expression*   
값으로 평가되는 단순 표현식입니다.

 * 연산자*   
 복합 산술 표현식은 다음 연산자의 순서에 따라 작성할 수 있습니다.  
+ ( ) : 평가 순서를 제어하기 위한 괄호
+ \$1 , - : 양 및 음의 부호/연산자
+  ^ , \$1/ , \$1\$1/ : 지수, 제곱근, 세제곱근
+ \$1 , / , % : 곱하기, 나누기 및 모듈로 연산자
+  @ : 절대값
+ \$1 , - : 더하기, 빼기
+ & , \$1, \$1, \$1, <<, >> : AND, OR, NOT, 왼쪽 이동, 오른쪽 이동 비트 연산자
+ \$1\$1: 연결

 *(compound\$1expression)*   
복합 표현식은 괄호를 사용해 중첩될 수 있습니다.

## 예제
<a name="r_compound_expressions-examples"></a>

복합 표현식의 예는 다음과 같습니다.

```
('SMITH' || 'JONES')
sum(x) / y
sqrt(256) * avg(column)
rank() over (order by qtysold) / 100
(select (pricepaid - commission) from sales where dateid = 1882) * (qtysold)
```

일부 함수는 다른 함수 내에서 중첩될 수도 있습니다. 예를 들어 스칼라 함수는 다른 스칼라 함수 내에서 중첩이 가능합니다. 다음은 숫자 집합의 절대값 총합을 반환하는 예입니다.

```
sum(abs(qtysold))
```

창 함수는 집계 함수 또는 기타 창 함수의 인수로 사용할 수 없습니다. 다음과 같은 표현식은 오류를 반환합니다.

```
avg(rank() over (order by qtysold))
```

창 함수에 중첩된 집계 함수가 포함될 수 있습니다. 다음은 값 집합의 총합을 구한 후 순위를 정하는 표현식입니다.

```
rank() over (order by sum(qtysold))
```

# 표현식 목록
<a name="r_expression_lists"></a>

표현식 목록이란 표현식의 조합을 말하며, 멤버십 및 비교 조건(WHERE 절)과 GROUP BY 절에서 지정할 수 있습니다.

## 구문
<a name="r_expression_lists-synopsis"></a>

```
expression , expression , ... | (expression, expression, ...)
```

## 인수
<a name="r_expression_lists-arguments"></a>

 * expression*   
값으로 평가되는 단순 표현식입니다. 표현식 목록에는 쉼표로 구분된 표현식 또는 쉼표로 구분된 표현식 집합이 1개 이상 포함됩니다. 표현식 집합이 다수일 때는 각 집합마다 표현식의 수가 동일하고, 괄호를 사용하여 집합을 구분해야 합니다. 각 집합의 표현식 수는 조건에서 연산자 앞에 있는 표현식 수와 일치해야 합니다.

## 예제
<a name="r_expression_lists-examples"></a>

다음은 조건에서 지정하는 표현식 목록의 예입니다.

```
(1, 5, 10)
('THESE', 'ARE', 'STRINGS')
(('one', 'two', 'three'), ('blue', 'yellow', 'green'))
```

각 집합의 표현식 수는 문의 첫 번째 부분에 있는 수와 일치해야 합니다.

```
select * from venue
where (venuecity, venuestate) in (('Miami', 'FL'), ('Tampa', 'FL'))
order by venueid;

venueid |        venuename        | venuecity | venuestate | venueseats
---------+-------------------------+-----------+------------+------------
28 | American Airlines Arena | Miami     | FL         |          0
54 | St. Pete Times Forum    | Tampa     | FL         |          0
91 | Raymond James Stadium   | Tampa     | FL         |      65647
(3 rows)
```

# 스칼라 하위 쿼리
<a name="r_scalar_subqueries"></a>

스칼라 하위 쿼리는 정확히 1개의 값, 즉 열 1개가 포함된 행 1개를 반환하는 정규 SELECT 쿼리이며, 괄호로 묶입니다. 쿼리를 실행하여 반환되는 값은 바깥쪽 쿼리에 사용됩니다. 하위 쿼리가 행을 0개 반환하는 경우 하위 쿼리 표현식의 값은 NULL입니다. 행을 2개 이상 반환하면 Amazon Redshift가 오류를 반환합니다. 하위 쿼리는 상위 쿼리의 변수를 참조할 수 있으며, 하위 쿼리를 한 번 호출할 때마다 상수 역할을 합니다.

스칼라 하위 쿼리는 표현식이 필요한 대부분 문에서 사용됩니다. 하지만 다음과 같은 경우에는 유효한 표현식이 아닙니다.
+ 표현식의 기본값으로 사용되는 경우
+ GROUP BY 및 HAVING 절에서 사용되는 경우

## 예제
<a name="r_scalar_subqueries-example"></a>

다음은 2008년 한 해 판매 한 건당 지불된 평균 가격을 계산하는 하위 쿼리입니다. 그러면 바깥쪽 쿼리가 출력 값을 사용하여 분기별로 판매 한 건당 평균 가격과 비교합니다.

```
select qtr, avg(pricepaid) as avg_saleprice_per_qtr,
(select avg(pricepaid)
from sales join date on sales.dateid=date.dateid
where year = 2008) as avg_saleprice_yearly
from sales join date on sales.dateid=date.dateid
where year = 2008
group by qtr
order by qtr;
qtr  | avg_saleprice_per_qtr | avg_saleprice_yearly
-------+-----------------------+----------------------
1     |                647.64 |               642.28
2     |                646.86 |               642.28
3     |                636.79 |               642.28
4     |                638.26 |               642.28
(4 rows)
```

# 함수 표현식
<a name="r_function_expressions"></a>

## 구문
<a name="r_function_expressions-syntax"></a>

내장 함수는 모두 표현식으로 사용할 수 있습니다. 함수 호출 구문이 함수의 이름이며, 그 뒤에 인수 목록이 괄호로 묶여서 입력됩니다.

```
function ( [expression [, expression...]] )
```

## 인수
<a name="r_function_expressions-arguments"></a>

 * 함수*   
내장 함수입니다. 예시 함수에 대한 자세한 내용은 [SQL 함수 참조](c_SQL_functions.md)  섹션을 참조하세요.

 * expression*   
함수에서 예상되는 데이터 형식 및 파라미터 수와 일치하는 표현식입니다.

## 예제
<a name="r_function_expressions-examples"></a>

```
abs (variable)
select avg (qtysold + 3) from sales;
select dateadd (day,30,caldate) as plus30days from date;
```