a배트맨 토토 표현테이블을 계산합니다. 배트맨 토토 표현에는가 포함됩니다.From선택적으로 뒤 따르는 조항여기서, 그룹 by및조항. 사소한 배트맨 토토 표현식은 단순히 소위베이스 인 디스크의 배트맨 토토을 참조합니다. 표이지만 더 복잡한 표현을 사용하여 수정하거나 기본 배트맨 토토을 다양한 방식으로 결합하십시오.
선택 사항여기서, 그룹 by및배트맨 토토 표현식의 조항은 연속의 파이프 라인을 지정합니다. 에서 파생 된 배트맨 토토에서 수행 된 변환From절. 이 모든 변환은 a 전달되는 행을 제공하는 가상 배트맨 토토 쿼리의 출력 행을 계산하려면 목록을 선택하십시오.
the절주어진 하나 이상의 다른 배트맨 토토에서 배트맨 토토을 파생 쉼표로 구분 된 배트맨 토토 참조 목록에서.
Fromtable_reference[, table_reference[, ...]]
배트맨 토토 참조는 배트맨 토토 이름 일 수 있습니다 (아마도 Schema-Qualified) 또는 하위 쿼리, A와 같은 파생 배트맨 토토Join구성 또는 복잡한 이것들의 조합. 하나 이상의 배트맨 토토 참조가 있다면 에 나열From조항, 표 크로스 조정 (즉, 행의 직교 제품) 형성된다; 아래를 참조하십시오). 의 결과From목록은 중간 가상 테이블입니다 그런 다음에 의해 변형 될 수 있습니다.여기서, 그룹 by및조항은 마침내입니다 전체 배트맨 토토 표현식의 결과.
배트맨 토토 참조가 A의 부모 인 배트맨 토토의 이름을 지정할 때 배트맨 토토 상속 계층 구조, 배트맨 토토 참조는 행을 생성합니다 그 배트맨 토토뿐만 아니라 모든 후손 배트맨 토토의 키워드전용테이블보다 우선합니다 이름. 그러나 참조는 그 열만 생성합니다 이름이 지정된 테이블에 나타납니다 - 서브 테이블에 추가 된 열은 다음과 같습니다. 무시.
쓰기 대신전용전 배트맨 토토 이름, 쓸 수 있습니다*이후 배트맨 토토 이름은 자손 배트맨 토토을 명시 적으로 지정합니다 포함. 글쓰기*필요하지 않습니다 그 행동은 기본값이기 때문에 설정 설정SQL_INHERITANCE구성 옵션). 그러나 쓰기*추가를 강조하는 데 유용 할 수 있습니다 배트맨 토토이 검색됩니다.
결합 된 배트맨 토토은 다른 두 가지에서 파생 된 배트맨 토토입니다 (Real 또는 파생) 특정 조인의 규칙에 따른 배트맨 토토 유형. 내부, 외부 및 크로스 조인을 사용할 수 있습니다. 그만큼 결합 된 배트맨 토토의 일반 구문은입니다.
T1 join_type T2[ join_condition ]
모든 유형의 결합은 함께 연결되거나 중첩 될 수 있습니다. 둘 중 하나 또는 둘 다T1andT2배트맨 토토에 결합 할 수 있습니다. 괄호는 주변에 사용할 수 있습니다Join조인 순서를 제어하기위한 조항. 없을 때 괄호,Join클로즈 둥지 왼쪽에서 오른쪽으로.
타입 조인
T1크로스 조인T2
가능한 모든 행 조합에서T1andT2(즉, 직교 제품), 결합 된 배트맨 토토에는 모두로 구성된 행이 포함됩니다. 열T1모든 열에 의해T2. 배트맨 토토에 각각 n과 m 행이 있으면 가입 배트맨 토토에는 n * m 행이 있습니다.
FromT1크로스 조인T2FromT1내부 조인T2on true(아래 참조). 그것 또한에 해당합니다.FromT1, T2.
참고 :이 후자의 동등성은 그렇지 않습니다 두 개의 배트맨 토토 이상이 나타나면 정확하게 유지하십시오. 왜냐하면Join더 많은 바인딩 쉼표보다 단단히. 예를 들어FromT1크로스 조인T2내부 가입하다T3on조건is 와 동일하지 않음FromT1, T2내부 조인T3on조건왜냐하면조건can 참조T1첫 번째 사례이지만 두 번째 사례는 아닙니다.
T1[내부] | 왼쪽 | 오른쪽 | 가득한 [외부] joinT2onboolean_expression T1[내부] | 왼쪽 | 오른쪽 | 가득한 [외부] joinT2사용 ( 사용열 목록에 가입)T1천연 [내부] | 왼쪽 | 오른쪽 | 가득한 [외부] joinT2
단어내부and외부는 선택 사항입니다 양식.내부기본값입니다;왼쪽, 오른쪽및full외부 조인을 암시합니다.
the조건 조건is 에 지정됨on또는사용조항 또는 암시 적으로 단어천연. 가입 조건은 두 소스의 행을 결정합니다 테이블은로 간주됩니다."매치", 자세히 설명 된대로 아래에.
자격을 갖춘 조인의 가능한 유형은 다음과 같습니다.
T1의 각 행 R1에 대해 결합 된 테이블에는 조인을 만족시키는 T2의 각 행에 대한 행 R1이있는 상태
먼저 내부 조인이 수행됩니다. 그런 다음 조인을 만족하지 않는 T1의 각 행 T2에 행이있는 상태, 결합 된 행은 T2 열에 널 값이 추가됩니다. 따라서, 결합 된 테이블에는 항상 적어도 하나의 행이 있습니다. T1의 각 행.
먼저 내부 조인이 수행됩니다. 그런 다음 조인을 만족하지 않는 T2의 각 행 T1에 행이있는 상태, 결합 된 행은 T1의 열에 널 값이 추가됩니다. 이것은 왼쪽 결합의 반대 : 결과 테이블 T2의 각 행 당 항상 행이 있습니다.
먼저 내부 조인이 수행됩니다. 그런 다음 조인을 만족하지 않는 T1의 각 행 T2에 행이있는 상태, 결합 된 행은 T2 열에 널 값이 추가됩니다. 또한, 조인을 만족하지 않는 T2의 각 행에 대해 T1의 모든 행이있는 상태, 결합 된 행 T1 열의 널 값이 추가됩니다.
theon절이 가장 중요합니다 일반적인 가입 조건 : 부울이 필요합니다 a와 같은 종류의 가치 표현여기서절. 한 쌍의 행 에서T1andT2일치on표현식은 true로 평가됩니다.
the사용절은 a 당신이 그것을 활용할 수있는 속기 조인의 양쪽이 사용하는 특정 상황 가입 열에 대해 동일한 이름입니다. 필요합니다 공유 열 이름의 쉼표로 구분 된 목록 평등을 포함하는 조인 조건을 형성합니다 각각에 대한 비교. 예를 들어, 가입T1andT2with사용 (A, B)조인 조건 생성onT1.a =T2.A 및T1.B =T2.B.
또한의 출력가입 사용중복 열을 억제하십시오 일치하는 두 열을 인쇄해야합니다. 동일한 값이 있어야합니다. 하는 동안가입 에모든 열을 생성T1그 다음에이 뒤 따릅니다.T2, 사용하나의 출력 열을 생성합니다 나열된 각 열 쌍에 대해 (나열된 Order), 나머지 열이 뒤 따릅니다T1나머지 열에서T2.
마지막으로천연is 속기 형태의사용: IT 양식 a사용목록으로 구성됩니다 두 입력 배트맨 토토 모두에 나타나는 모든 열 이름 중 와 마찬가지로사용,이 열 출력 배트맨 토토에 한 번만 나타납니다. 없다면 공통 열 이름,천연크로스 조인.
참고 : 사용is 결합 된 열 변경으로부터 합리적으로 안전합니다 나열된 열만이므로 관계 결합.천연IS 스키마가 변경되기 때문에 훨씬 더 위험합니다 새로운 일치 열을 일으키는 관계 참석할 이름은 가입이 결합됩니다. 그 새로운 칼럼도.
이것을 합치려면 배트맨 토토이 있다고 가정합니다T1:
Num | 이름 -----+------ 1 | 에이 2 | 비 3 | 기음
및T2:
Num | 값 -----+------- 1 | 트리플 엑스 3 | YYY 5 | 쿨쿨
그런 다음 다양한 결과를 얻습니다 조인 :
= 선택 *에서 T1 크로스 조인 T2;Num | 이름 | Num | 값 -----+------+-----+------- 1 | A | 1 | 트리플 엑스 1 | A | 3 | YYY 1 | A | 5 | 쿨쿨 2 | B | 1 | 트리플 엑스 2 | B | 3 | YYY 2 | B | 5 | 쿨쿨 3 | C | 1 | 트리플 엑스 3 | C | 3 | YYY 3 | C | 5 | 쿨쿨 (9 줄)= 선택 *에서 t1 내부 t2에서 t2에서 t2를 결합하여 t2 = t2.num;Num | 이름 | Num | 값 -----+------+-----+------- 1 | A | 1 | 트리플 엑스 3 | C | 3 | YYY (2 줄)= 선택 *에서 t1 내부 join t2를 사용하여 (num);Num | 이름 | 값 -----+------+------- 1 | A | 트리플 엑스 3 | C | YYY (2 줄)= 선택 *에서 T1 Natural Inner Join T2;Num | 이름 | 값 -----+------+------- 1 | A | 트리플 엑스 3 | C | YYY (2 줄)= 선택 *에서 t1에서 t1에서 t2를 결합하여 t1.num = t2.num;Num | 이름 | Num | 값 -----+------+-----+------- 1 | A | 1 | 트리플 엑스 2 | B | | 3 | C | 3 | YYY (3 줄)= select * from t1 왼쪽 왼쪽 왼쪽 t2를 사용하여 (num);Num | 이름 | 값 -----+------+------- 1 | A | 트리플 엑스 2 | B | 3 | C | YYY (3 줄)= 선택 * T1에서 T1에서 T2 가입 T1.num = t2.num;Num | 이름 | Num | 값 -----+------+-----+------- 1 | A | 1 | 트리플 엑스 3 | C | 3 | YYY | | 5 | 쿨쿨 (3 줄)= 선택 *에서 t1에서 t1에서 t2에서 t2를 결합하여 t2 = t2.num;Num | 이름 | Num | 값 -----+------+-----+------- 1 | A | 1 | 트리플 엑스 2 | B | | 3 | C | 3 | YYY | | 5 | 쿨쿨 (4 줄)
지정된 조정 조건on에는 그렇지 않은 조건도 포함 할 수 있습니다 가입과 직접 관련됩니다. 이것은 일부에게 유용 할 수 있습니다 쿼리이지만 신중하게 생각해야합니다. 을 위한 예:
= 선택 *에서 * t1에서 t1에서 t2를 결합하여 t1.num = t2.num 및 t2.value = 'xxx';Num | 이름 | Num | 값 -----+------+-----+------- 1 | A | 1 | 트리플 엑스 2 | B | | 3 | C | | (3 줄)
제한을 제한하는 것을 주목하십시오여기서조항은 다른 결과를 낳습니다 :
= 선택 * 선택 *에서 t1에서 t2에 t2를 결합하여 t2 value = 'xxx';Num | 이름 | Num | 값 -----+------+-----+------- 1 | A | 1 | 트리플 엑스 (1 행)
이것은에 제한이 배치 되었기 때문입니다.on조항이 처리전가입, a 에 제한이있는 제한여기서조항이 처리이후가입. 그렇지 않습니다 내부가 결합 된 문제이지만 외부에서는 중요합니다. 조인.
테이블과 복잡한 테이블에 임시 이름이 제공 될 수 있습니다. 도출 된 테이블에 대한 참조에 사용되는 참조 나머지 쿼리. 이것을 A라고합니다.배트맨 토토 별명.
배트맨 토토 별칭을 만들려면 쓰기
Fromtable_referenceasalias
또는
Fromtable_reference 별명
theas키워드는 선택 사항입니다 소음.alias식별자.
일반적인 배트맨 토토 별칭의 적용은 단락을 할당하는 것입니다. 조인 조항을 유지하기 위해 긴 배트맨 토토 이름에 식별자 읽을 수 있습니다. 예를 들어:
SELECT * From some_very_long_table_name s onther_fairly_long_name a on s.id = a.num; 가입
별칭은 테이블 참조의 새 이름이됩니다. 현재 쿼리에 관한 한 - 허용되지 않습니다. 다른 곳에서 원래 이름으로 테이블을 참조하십시오. 질문. 따라서 이것은 유효하지 않습니다 :
my_table.a 5에 my_table에서 my_table에서 선택 *을 선택하십시오. -- 잘못된
테이블 별칭은 주로 표기법 편의를위한 것이지만 테이블에 연결할 때 사용해야합니다. 예 :
선택 * 어머니로서 사람들로부터 어머니로서 사람과 함께 자녀로 사람과 함께 어머니. id = child.mother_id;
또한 표를 참조하면 별칭이 필요합니다 하위 쿼리입니다 (참조섹션 7.2.1.3).
괄호는 모호성을 해결하는 데 사용됩니다. 에서 다음 예를 들어 첫 번째 진술은 별칭을 할당합니다B두 번째 인스턴스my_table그러나 두 번째 진술 Alias를 조인 결과에 할당합니다.
선택 *에서 my_table에서 크로스 가입 my_table b로 my_table을 선택하십시오. 선택 * (my_table as a cross join my_table) as b ...를 선택하십시오.
다른 형태의 배트맨 토토 앨리어싱은 임시 이름을 제공합니다 배트맨 토토의 열과 배트맨 토토 자체 :
Fromtable_reference[as]alias(컬럼 1[, 컬럼 2[, ...]])
컬럼 별칭이 실제보다 지정된 경우 배트맨 토토에는 열이 있으며 나머지 열에 이름이 바뀌지 않습니다. 이 구문은 특히자가 요인에 유용합니다 하위 쿼리.
ALIA가 A의 출력에 적용되는 경우Join절단, 별칭은 원본을 숨 깁니다 내 이름Join. 을 위한 예:
선택 a.* my_table에서 a as your_table as b on ...
유효한 SQL이지만 :
선택 a.*에서 (my_table as as your_table as b on ...) as c
유효하지 않습니다. 배트맨 토토 별명a별칭 외부에서 보이지 않습니다C.
파생 된 배트맨 토토을 지정하는 하위 쿼리는 포함되어야합니다 괄호 및필수배트맨 토토 별명을 할당해야합니다 이름. (보다섹션 7.2.1.2.) 예 :
From (select * from table1) as alias_name
이 예제는와 같습니다.Alias_name as table1. 더 흥미로운 경우 평범한 결합으로 축소 할 수 없습니다. 그룹화 또는 집계가 포함됩니다.
하위 쿼리도 A가 될 수 있습니다.값목록 :
from (vales ( 'anne', 'smith'), ( 'bob', 'Jones'), ( 'Joe', 'blow'))) 이름으로 (첫 번째, 마지막)
다시 배트맨 토토 별명이 필요합니다. 별칭 이름을 할당합니다 의 열값목록입니다 선택 사항이지만 좋은 관행입니다. 자세한 내용은 참조윈 토토 : 문서 : 9.1 : 값 목록.
테이블 함수는 행 세트를 생성하는 함수입니다. 기본 데이터 유형 (스칼라 유형) 또는 합성물로 구성 데이터 유형 (테이블 행). 그들은 테이블,보기, 또는 의 하위 퀴어Froma 질문. 배트맨 토토 함수에 의해 반환 된 열은에 포함될 수 있습니다.select, Join또는어디테이블, 뷰 또는 하위 쿼리와 같은 방식으로 조항 열.
테이블 함수가 기본 데이터 유형을 반환하는 경우 단일 결과 열 이름은 함수 이름과 일치합니다. 함수 인 경우 복합 유형을 반환하면 결과 열이 동일하게됩니다. 유형의 개별 속성으로 이름.
테이블 함수는에 별명을 할 수 있습니다.From조항이지만 남을 수도 있습니다 알리 아스. 함수가 사용되는 경우From별명이없는 절, 함수 이름 결과 테이블 이름으로 사용됩니다.
일부 예 :
테이블 foo 생성 (FOODER int, foosubid int, fooname 텍스트); function getfoo (int) foo는 foo를 $$로 반환합니다 FOO에서 * FOO FOOOD = $ 1; $$ 언어 SQL; getfoo (1)에서 *를 t1로 선택하십시오. FOO에서 *를 선택하십시오 foosubid의 ( foosubid를 선택하십시오 getfoo (foo.fooid) z에서 여기서 z.foooid = foo.foooid ); getfoo (1)에서 select *로보기 vw_getfoo를 만듭니다. * vw_getfoo;에서 * 선택
경우에 따라 테이블 함수를 정의하는 것이 유용합니다. 다른 열 세트를 반환 할 수 있습니다. 호출. 이를 지원하기 위해 테이블 기능을 선언 할 수 있습니다 유사 형을 되 돌리는 동안레코드. 이러한 함수가 쿼리에서 사용되면 예상 행 구조는 쿼리 자체에 지정되어야합니다. 시스템은 쿼리를 구문 분석하고 계획하는 방법을 알 수 있습니다. 고려하다 이 예 :
선택 * DBLINK에서 ( 'dbname = mydb', 'pg_proc에서 proname, prosrc') T1 (Proname Name, Prosrc 텍스트) Proname과 같은 'Bytea%';
thePostgreSQL : 문서 : 9.1 : 토토 결과함수 (의 일부토토 사이트 : 문서 : 9.1 : DBLINKmodule) 원격 쿼리를 실행합니다. 반품으로 선언 됨레코드사용될 수 있으므로 종류의 쿼리. 실제 열 세트는 예를 들어 파서가 알 수 있도록 쿼리를 호출하여*확장해야합니다.
의 구문어디서 절is
여기서search_condition
여기서search_conditionIS 모든 값 표현식 (섹션 4.2) 값을 반환하는 유형부울.
처리 후From조항이 완료되며, 파생 된 가상 테이블의 각 행은 검색 조건에 대해 확인했습니다. 결과의 결과 조건은 사실입니다. 행은 출력 테이블에 보관됩니다. 그렇지 않으면 (즉, 결과가 False 또는 NULL 인 경우) 폐기. 검색 조건은 일반적으로 최소한 참조됩니다 에서 생성 된 테이블의 열 한 열From절; 이것은 필요하지 않지만 그렇지 않으면 그만큼여기서절은 공정하게 될 것입니다 쓸모 없는.
참고 :내부 조인의 조인 조건은 될 수 있습니다 에 작성여기서절 또는에서Join절. 을 위한 예를 들어이 배트맨 토토 표현식은 다음과 같습니다.
a, b에서 b, 여기서 a.id = b.id 및 b.val 5및 :
a 내부 조인 B On (a.id = b.id)에서 b.val 5또는 아마도 :
자연 조인 B에서 B B.Val 5당신이 사용하는 이들 중 어느 것이 주로 스타일의 문제입니다. 그만큼Join구문의From조항은 아마도 휴대용이 아닐 것입니다 다른 SQL 데이터베이스 관리 시스템이 있지만 SQL 표준. 외부 조인의 경우 선택의 여지가 없습니다 에서 수행해야합니다.From절. 그만큼on또는사용외부 조인 조항은아님에이어디조건 행을 추가하는 결과 (타의 추종없는 입력 행의 경우) 최종 결과에서 행을 제거 할뿐만 아니라
다음은의 몇 가지 예입니다.여기서조항 :
선택 ... FDT에서 C1 5 선택 ... FDT에서 C1 in (1, 2, 3) 선택 ... FDT에서 C1 in (T2에서 C1 선택) 선택 ... FDT에서 C1 in (T2에서 C3를 선택하십시오. 여기서 C2 = Fdt.c1 + 10) 선택 ... FDT에서 C1 사이의 C1 (T2에서 C3를 선택하여 C2 = FDT.C1 + 10)과 100 선택 ... FDT에서 존재하는 곳 (T2에서 C1을 선택하여 C2 FDT.C1)
FDT에서 파생 된 배트맨 토토From절. 만나지 않는 행 의 검색 조건여기서절 에서 제거됩니다FDT. 주목하십시오 스칼라 하위 쿼리를 값 표현식으로 사용합니다. 어떤 것과 마찬가지로 다른 쿼리, 하위 쿼리는 복잡한 테이블을 사용할 수 있습니다 표현. 또한 어떻게FDTIS 하위 쿼리에서 참조됩니다. 자격C1asfdt.c1전용입니다 필요한 경우C1또한 a의 이름이기도합니다 서브 쿼리의 파생 입력 테이블의 열. 하지만 열 이름 자격은 그렇지 않은 경우에도 명확성을 추가합니다. 필요합니다. 이 예제는 열 이름 지정 범위가 외부 쿼리는 내부 쿼리로 확장됩니다.
통과 후여기서필터, 파생 입력 테이블은를 사용하여 그룹화 될 수 있습니다.그룹 by조항 및 제거 를 사용하는 그룹 행절.
selectselect_list[어디서 ...] 그룹 byGrouping_Column_Reference[, Grouping_Column_Reference] ...
the그룹 by clause테이블에서 그 행을 함께 그룹화하는 데 사용됩니다. 나열된 모든 열에 동일한 값이 있습니다. 주문 열이 나열된 경우에는 중요하지 않습니다. 효과는 공통 값을 가진 각 행 세트를 한 그룹으로 결합하려면 그룹의 모든 행을 나타내는 행입니다. 이것은 끝났습니다 출력 및/또는 계산 골재의 중복성을 제거합니다 이 그룹에 적용됩니다. 예를 들어:
= 선택 *에서 test1;x | 와이 ---+--- A | 3 C | 2 B | 5 A | 1 (4 줄)= Test1 Group에서 X;에서 X를 선택하십시오.x --- 에이 비 기음 (3 줄)
두 번째 쿼리에서 우리는 쓸 수 없었습니다선택 *에서 Test1 Group에서 x가 있기 때문입니다 열에 대한 단일 값 없음y각 그룹과 관련 될 수 있습니다. 그룹화 된 열은 할 수 있습니다 단일 값이 있으므로 선택 목록에서 참조됩니다. 각 그룹에서.
일반적으로 배트맨 토토이 그룹화되면 열이 아닙니다. 에 나열됨그룹 by할 수 없습니다 총 표현을 제외하고 참조. 예를 들어 골재 표현은 다음과 같습니다.
= X, Sum (y) X, Test1 Group에서 X;를 선택하십시오.x | 합집합 ---+----- A | 4 B | 5 C | 2 (3 줄)
여기Sum는 집계 함수입니다 이는 전체 그룹에 걸쳐 단일 값을 계산합니다. 더 사용 가능한 집계 기능에 대한 정보는 다음과 같습니다 에서 발견PostgreSQL :.
팁 :집계 표현이없는 그룹화 a.의 별개의 값 세트를 효과적으로 계산합니다 열. 이것은 또한를 사용하여 달성 할 수 있습니다.별도의절 (참조섹션 7.3.3).
여기에 또 다른 예가 있습니다. 총 판매량을 계산합니다. 각 제품 (모든 제품의 총 판매가 아닌) :
Product_id, P.Name, (sum (s.units) * P.Price)을 판매로 선택하십시오 제품 P에서 왼쪽 왼쪽에 가입 판매 (product_id) Product_id, P.Name, P.Price;의 그룹
이 예에서 열product_id, p.name및P.Price그룹 by조항에서 참조되므로 쿼리 선택 목록 (그러나 아래 참조). 열S.units그룹 by목록에서만 사용되므로 골재 표현 (sum (...)) 제품의 판매를 나타냅니다. 각 제품에 대해 쿼리 제품의 모든 판매에 대한 요약 행을 반환합니다.
제품 배트맨 토토이 설정되어 있으면product_id기본 키는 그럴 것입니다 그룹에 충분히product_id위의 예, 이름과 가격이이므로기능적으로 의존적제품 ID에서 그래서 어떤 이름과 가격 가치에 대한 모호성이 없습니다 각 제품 ID 그룹에 대한 반환.
엄격한 SQL에서그룹 by만 가능합니다 소스 배트맨 토토의 열별 그룹이지만PostgreSQL허용하도록 이것을 확장합니다그룹 by목록을 선택하십시오. 단순한 대신 가치 표현식으로 그룹화합니다 열 이름도 허용됩니다.
테이블을 사용하여 그룹화 된 경우그룹 에 의해, 그러나 특정 그룹 만 관심이 있습니다.조항을 사용할 수 있습니다.여기서clause, 그룹을 제거합니다 결과. 구문은 다음과 같습니다.
selectselect_listFrom ... [어디서 ...] 그룹에 의한 그룹 ...boolean_expression
표현절 그룹화 된 표현식과 그룹화되지 않은 것을 참조 할 수 있습니다 표현식 (반드시 집계가 포함됩니다 기능).
예 :
= SOLECT X, SUM (Y) 3;x | 합집합 ---+----- A | 4 B | 5 (2 줄)= x < 'c';에 의해 test1 그룹에서 x, sum (y)을 선택하십시오.x | 합집합 ---+----- A | 4 B | 5 (2 줄)
다시, 더 현실적인 예 :
Product_id, P.Name, (sum (s.units) * (p.price -p.cost))))) 제품 P에서 왼쪽 왼쪽에 가입 판매 (product_id) 여기서 s.date current_date- 간격 '4 주' product_id, p.name, p.price, p.cost의 그룹 합계 (p.price * s.units) 5000;
위의 예에서어디절은 그룹화되지 않은 열에 따라 행을 선택합니다 ( 표현은 지난 4 주 동안 판매에만 해당됩니다), 동안조항은 다음을 제한합니다 총 총 매출이 5000 이상인 그룹에 대한 출력. 집계 표현이 반드시 쿼리의 모든 부분에서 동일합니다.
쿼리에 집계 함수 호출이 포함되어 있지만 아니요그룹 by조항, 그룹화 발생 : 결과는 단일 그룹 행입니다 (또는 아마도 행이 없습니다. 모두, 단일 행이에 의해 제거되면). A를 포함하는 경우에도 마찬가지입니다.조항은 없습니다 집계 기능 호출 또는그룹 by절.
쿼리에 창 함수가 포함 된 경우 (참조섹션 3.5, 섹션 9.19및섹션 4.2.8),이 기능은 그룹화 후 평가됩니다. 집계 및필터링은입니다 수행. 즉, 쿼리가 골재를 사용하는 경우그룹 by또는함수는 원래 배트맨 토토 행 대신 그룹 행입니다. 에서From/여기서.
여러 창 함수가 사용되면 모든 창이 사용됩니다 구문 적으로 동등한 기능파티션 byand주문 에 의해창 정의의 조항이 보장됩니다 데이터를 통해 단일 패스로 평가됩니다. 그러므로 그들은 이더라도 동일한 정렬 순서가 표시됩니다.주문 byan 주문. 그러나 평가에 대한 보장은 없습니다 다른 기능파티션 에 의해또는주문 by사양. (그러한 경우에는 정렬 단계가 일반적으로 윈도우 함수 평가의 패스와 정렬은 행의 순서를 보존하도록 보장주문 by동등한 것으로 본다.)
현재, 창 함수는 항상 분명한 데이터가 필요합니다. 쿼리 출력은 하나 또는 다른 창 함수 '파티션 에 의해/주문 by조항. 그렇지 않습니다 그러나 이것에 의존하는 것이 좋습니다. 명백한 것을 사용하십시오 최상위주문 by원하는 경우 조항 결과가 특정 방식으로 정렬되어 있는지 확인하십시오.