이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
다음에 대한 동일한 페이지를 보고 싶을 수도 있습니다.와이즈 토토 4_AAA버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

7.2. 테이블 표현식

A 스포츠 토토 표현식테이블을 계산합니다. 스포츠 토토 표현식에는발신선택적으로 뒤에 오는 절어디, 그룹별가지고 있는절. 사소한 스포츠 토토 표현식은 단순히 디스크의 스포츠 토토, 소위 기본 스포츠 토토을 나타냅니다. 스포츠 토토이지만 더 복잡한 표현식을 사용하여 수정하거나 다양한 방법으로 기본 스포츠 토토을 결합합니다.

선택사항어디, 그룹별가지고 있는스포츠 토토 표현식의 절은 연속적인 파이프라인을 지정합니다. 에서 파생된 테이블에서 수행된 변환발신절. 이러한 모든 변환은 다음을 생성합니다. 전달되는 행을 제공하는 가상 테이블 쿼리의 출력 행을 계산하려면 목록을 선택하세요.

7.2.1. 그만큼발신

발신절이 스포츠 토토을 파생함 쉼표로 구분된 표에 제공된 하나 이상의 다른 표에서 참고 목록.

발신table_reference [, 스포츠 토토_참조 [, ...]]

스포츠 토토 참조는 스포츠 토토 이름일 수 있습니다(아마도 스키마 한정) 또는 하위 쿼리와 같은 파생 스포츠 토토 스포츠 토토 조인 또는 이들의 복잡한 조합. 1개 이상인 경우 스포츠 토토 참조는에 나열되어 있습니다.발신절은 서로 결합되어(아래 참조) 다음을 형성합니다. 이후에 적용될 수 있는 중간 가상 테이블 에 의한 변환어디에서, 그룹별가지고 있는 중절이며 마지막으로 다음의 결과입니다. 전체 스포츠 토토 표현식입니다.

테이블 참조가 상위 테이블인 테이블의 이름을 지정할 때 테이블 상속 계층 구조에서 테이블 참조는 다음을 생성합니다. 해당 테이블뿐만 아니라 모든 하위 테이블 후속 항목의 행, 핵심 단어가 아니면앞에 스포츠 토토 이름. 그러나 참조는 열만 생성합니다. 명명된 스포츠 토토에 나타나는 --- 스포츠 토토에 추가된 모든 열 하위 표는 무시됩니다.

7.2.1.1. 조인된 테이블

조인된 스포츠 토토은 다른 두 개(실제 또는 파생) 특정 조인 규칙에 따른 스포츠 토토 유형. 내부, 외부 및 교차 조인을 사용할 수 있습니다.

조인 유형

교차 조인
T1교차 조인T2

다음의 각 행 조합에 대해T1그리고T2, 파생 스포츠 토토은 의 모든 열로 구성된 행을 포함합니다.T1다음의 모든 열이 이어짐T2. 스포츠 토토이 있는 경우 각각 N 및 M 행, 조인된 스포츠 토토은 N 개를 갖습니다. * M행.

발신T1교차 조인T2다음과 동일함발신T1, T2. 또한 다음과 같습니다.발신T1내부 조인T2참으로 설정(아래 참조).

적격한 조인
T1 { [내부] |  왼쪽 | 맞다 | 가득한  [외부]  가입T2켜짐boolean_expression
T1 { [내부] |  왼쪽 | 맞다 | 가득한  [외부]  가입T2사용 중(열 목록 조인 )
T1자연스러운  [내부] |  왼쪽 | 맞다 | 가득한  [외부]  가입T2

말씀내부그리고외부모두 선택사항입니다. 양식.내부기본값입니다.왼쪽, 오른쪽전체외부 조인을 암시합니다.

조인 조건이다 에 지정됨ON또는사용 중절 또는 암시적으로 단어자연스러운. 조인 조건은 두 소스의 행을 결정합니다. 테이블은 다음으로 간주됩니다."일치"자세히 설명된 대로 아래에.

켜짐절이 가장 많습니다. 일반적인 종류의 조인 조건: 부울을 사용합니다. a에 사용된 것과 동일한 종류의 값 표현식어디절. 한 쌍의 행 에서T1그리고T2다음과 같은 경우 일치켜짐표현식은 다음에 대해 true로 평가됩니다. 그들을.

사용 중약칭입니다 표기법: 쉼표로 구분된 열 목록을 사용합니다. 조인된 테이블이 공통적으로 가져야 하는 이름 각각의 동등성을 지정하는 조인 조건을 형성합니다. 이 열 쌍. 또한, a의 출력다음을 사용하여 가입다음에 대한 열이 하나 있습니다. 각 입력 열의 동일한 쌍과 그 뒤에 각 테이블의 다른 모든 열. 따라서,(a, b, c) 사용동등함 에게ON(t1.a = t2.a AND t1.b = t2.b 그리고 t1.c = t2.c)다음 경우를 제외하고켜짐두 개가 사용됩니다. 열a, bc에 결과, 반면에사용 중각각 하나씩만 있을 것입니다.

마지막으로,자연스러운는의 약어입니다.사용 중: 그것은 다음을 형성합니다사용 중정확히 다음으로 구성된 목록 두 입력 테이블 모두에 나타나는 열 이름입니다. 마찬가지로사용 중, 다음 열이 나타납니다. 출력 테이블에 한 번만 표시됩니다.

적격한 조인의 가능한 유형은 다음과 같습니다:

내부 조인

T1의 각 행 R1에 대해 조인된 테이블에는 다음이 있습니다. 조인을 만족하는 T2의 각 행에 대한 행 R1의 조건.

왼쪽 외부 조인

먼저 내부 조인이 수행됩니다. 그런 다음 조인을 만족하지 않는 T1의 각 행 T2의 행에 대한 조건이 있는 경우 조인된 행은 다음과 같습니다. T2의 열에 Null 값이 추가되었습니다. 따라서, 조인된 테이블에는 무조건 하나 이상의 테이블이 있습니다. T1의 각 행에 대한 행입니다.

오른쪽 외부 조인

먼저 내부 조인이 수행됩니다. 그런 다음 조인을 만족하지 않는 T2의 각 행 T1의 행에 대한 조건이 있는 경우 조인된 행은 다음과 같습니다. T1의 열에 Null 값이 추가되었습니다. 이것은 왼쪽 조인의 반대: 결과 테이블 무조건 각 행에 대해 행을 갖게 됩니다. T2.

완전 외부 조인

먼저 내부 조인이 수행됩니다. 그런 다음 조인을 만족하지 않는 T1의 각 행 T2의 행에 대한 조건이 있는 경우 조인된 행은 다음과 같습니다. T2의 열에 Null 값이 추가되었습니다. 또한, 조인을 만족하지 않는 T2의 각 행에 대해 T1의 행에 대한 조건, 다음과 결합된 행 T1 열의 null 값이 추가됩니다.

모든 유형의 조인은 함께 연결되거나 중첩될 수 있습니다. 둘 중 하나 또는 둘 다T1그리고T2스포츠 토토을 조인할 수 있습니다. 주위에 괄호를 사용할 수 있습니다.가입조인 순서를 제어하는 ​​절입니다. 부재시 괄호,가입절 둥지 왼쪽에서 오른쪽으로.

이것을 합치려면 스포츠 토토이 있다고 가정합니다.t1

번호 | 이름
-----+------
   1 | 에이
   2 | 비
   3 | 기음

그리고t2

번호 | 값
------+-------
   1 | 트리플 엑스
   3 | 이야
   5 | 쿨쿨

그러면 다양한 항목에 대해 다음과 같은 결과를 얻습니다. 조인:

= SELECT * FROM t1 CROSS JOIN t2;번호 | 이름 | 숫자 | 값
------+------+------+-------
   1 | |   1 | 트리플 엑스
   1 | |   3 | 이야
   1 | |   5 | 쿨쿨
   2 | 비 |   1 | 트리플 엑스
   2 | 비 |   3 | 이야
   2 | 비 |   5 | 쿨쿨
   3 | c |   1 | 트리플 엑스
   3 | c |   3 | 이야
   3 | c |   5 | 쿨쿨
(9행)= SELECT * FROM t1 INNER JOIN t2 ON t1.num = t2.num;번호 | 이름 | 숫자 | 값
------+------+------+-------
   1 | |   1 | 트리플 엑스
   3 | c |   3 | 이야
(2행)= SELECT * FROM t1 INNER JOIN t2 USING (num);번호 | 이름 | 값
------+------+-------
   1 | | 트리플 엑스
   3 | c | 이야
(2행)= SELECT * FROM t1 NATURAL INNER JOIN t2;번호 | 이름 | 값
------+------+-------
   1 | | 트리플 엑스
   3 | c | 이야
(2행)= SELECT * FROM t1 LEFT JOIN t2 ON t1.num = t2.num;번호 | 이름 | 숫자 | 값
------+------+------+-------
   1 | |   1 | 트리플 엑스
   2 | 비 |     |
   3 | c |   3 | 이야
(3행)= SELECT * FROM t1 LEFT JOIN t2 USING (num);번호 | 이름 | 값
------+------+-------
   1 | | 트리플 엑스
   2 | 비 |
   3 | c | 이야
(3행)= SELECT * FROM t1 RIGHT JOIN t2 ON t1.num = t2.num;번호 | 이름 | 숫자 | 값
------+------+------+-------
   1 | |   1 | 트리플 엑스
   3 | c |   3 | 이야
     |      |   5 | 쿨쿨
(3행)= SELECT * FROM t1 FULL JOIN t2 ON t1.num = t2.num;번호 | 이름 | 숫자 | 값
------+------+------+-------
   1 | |   1 | 트리플 엑스
   2 | 비 |     |
   3 | c |   3 | 이야
     |      |   5 | 쿨쿨
(4행)

다음으로 지정된 조인 조건켜짐또한 다음과 같은 조건을 포함할 수 있습니다. 조인과 직접 관련이 있습니다. 이것은 일부에게 유용할 수 있습니다. 질문이 있지만 신중하게 생각해야 합니다. 을 위한 예:

= SELECT * FROM t1 LEFT JOIN t2 ON t1.num = t2.num AND t2.value = 'xxx';번호 | 이름 | 숫자 | 값
------+------+------+-------
   1 | |   1 | 트리플 엑스
   2 | 비 |     |
   3 | c |     |
(3행)

7.2.1.2. 테이블 및 열 별칭

스포츠 토토 및 복잡한 스포츠 토토에 임시 이름을 부여할 수 있습니다. 파생 스포츠 토토에 대한 참조에 사용되는 참조 추가 처리. 이것을 a라고 합니다.스포츠 토토 별칭.

스포츠 토토 별칭을 생성하려면 다음을 작성하십시오.

발신스포츠 토토_참조AS별칭

또는

발신스포츠 토토_참조 별명

AS키워드는 소음입니다.별칭어떤 것이든 가능 식별자.

스포츠 토토 별칭의 일반적인 적용은 짧은 할당입니다 조인 절을 유지하기 위한 긴 테이블 이름에 대한 식별자 읽을 수 있습니다. 예를 들어:

SELECT * FROM some_very_long_table_name s JOIN another_fairly_long_name a ON s.id = a.num;

별칭은 다음에 대한 테이블 참조의 새 이름이 됩니다. 현재 쿼리 - 더 이상 참조할 수 없습니다. 원래 이름으로 된 테이블입니다. 따라서

SELECT * FROM my_table AS m WHERE my_table.a  5;

은 유효한 SQL 구문이 아닙니다. 실제로 무슨 일이 일어날 것인가(이것은 는PostgreSQL확장자 표준)은 암시적 스포츠 토토 참조가 그만큼발신절이므로 쿼리는 다음과 같습니다. 다음과 같이 작성된 것처럼 처리됩니다.

SELECT * FROM my_table AS m, my_table AS my_table WHERE my_table.a  5;

교차 조인이 발생하지만 일반적으로 그렇지 않습니다. 당신이 원하는 것.

스포츠 토토 별칭은 주로 표기상의 편의를 위한 것이지만 테이블 자체를 조인할 때 이를 사용해야 합니다. 예를 들어,

SELECT * FROM my_table AS a CROSS JOIN my_table AS b ...

또한 테이블 참조인 경우 별칭이 필요합니다. 하위 쿼리입니다(참조섹션 7.2.1.3).

괄호는 모호성을 해결하는 데 사용됩니다. 다음 문은 별칭을 할당합니다b에 이전 예와 달리 조인 결과:

SELECT * FROM (my_table AS a CROSS JOIN my_table) AS b ...

스포츠 토토 별칭의 또 다른 형태는 임시 이름을 제공합니다. 테이블의 열에:

발신스포츠 토토_참조 [AS] 별칭 ( 열1 [, 열2 [, ...]] )

실제보다 적은 수의 열 별칭이 지정된 경우 테이블에 열이 있고 나머지 열의 이름은 바뀌지 않습니다. 이 구문은 특히 자체 조인 또는 하위 쿼리.

별칭이 a의 출력에 적용될 때가입절, 이러한 형식 중 하나를 사용하면 별칭은 내의 원래 이름을 숨깁니다.가입. 예를 들어,

SELECT a.* FROM my_table AS a JOIN your_table AS b ON ...

유효한 SQL이지만

SELECT a.* FROM (my_table AS a JOIN your_table AS b ON ...) AS c

유효하지 않음: 스포츠 토토 별칭a별칭 외부에는 표시되지 않습니다.c.

7.2.1.3. 하위 쿼리

파생 테이블을 지정하는 하위 쿼리는 다음으로 묶어야 합니다. 괄호 및반드시스포츠 토토 별칭을 할당받음 이름. (보다섹션 7.2.1.2.) 예:

FROM (SELECT * FROM table1) AS alias_name

이 예는 다음과 같습니다.발신 table1 AS alias_name. 더 흥미로운 사례는 다음과 같습니다. 일반 조인으로 축소할 수 없으며 하위 쿼리가 발생할 때 발생합니다. 그룹화 또는 집계가 포함됩니다.

7.2.1.4. 테이블 기능

테이블 함수는 일련의 행을 생성하는 함수입니다. 기본 데이터 유형(스칼라 유형) 또는 복합 데이터 유형으로 구성됨 데이터 유형(테이블 행). 테이블, 뷰 또는 의 하위 쿼리발신a의 절 질문. 테이블 함수에서 반환된 열은 다음에 포함될 수 있습니다.선택, 가입, 또는어디에서테이블, 뷰 또는 하위 쿼리와 동일한 방식으로 절 열.

스포츠 토토 함수가 기본 데이터 유형을 반환하는 경우 단일 결과 열의 이름은 함수와 동일합니다. 기능의 경우 복합 유형을 반환하면 결과 열은 동일해집니다. 유형의 개별 속성으로 이름을 지정합니다.

테이블 함수는 다음에서 별칭이 지정될 수 있습니다.발신절이지만 남겨질 수도 있습니다. 앨리어싱되지 않음. 함수가에서 사용되는 경우발신별칭이 없는 절, 함수 이름 결과 테이블 이름으로 사용됩니다.

일부 예:

CREATE TABLE foo(foid int, foosubid int, fooname 텍스트);

함수 생성 getfoo(int)는 SETOF foo를 '로 반환합니다.
    SELECT * FROM foo WHERE fooid = $1;
' 언어 SQL;

SELECT * FROM getfoo(1) AS t1;

SELECT * FROM foo에서
    foosubid IN(getfoo(foo.foid) z에서 foosubid 선택)
                           여기서 z.foid = foo.foid);

CREATE VIEW vw_getfoo AS SELECT * FROM getfoo(1);
SELECT * vw_getfoo에서;

어떤 경우에는 다음과 같은 테이블 함수를 정의하는 것이 유용합니다. 상태에 따라 다른 열 집합을 반환할 수 있습니다. 호출되었습니다. 이를 지원하기 위해 테이블 ​​함수를 선언할 수 있습니다. 의사 유형을 반환하는 것과 같이기록. 이러한 함수를 쿼리에 사용하면 예상되는 행이 구조는 쿼리 자체에 지정되어야 합니다. 시스템은 쿼리를 구문 분석하고 계획하는 방법을 알 수 있습니다. 고려하다 이 예:

선택 *
    FROM dblink('dbname=mydb', 'pg_proc에서 proname, prosrc 선택')
      AS t1(이름, prosrc 텍스트)
    'bytea%'와 같은 이름이 있는 곳;

dlink함수는 다음을 실행합니다. 원격 쿼리(참조기여/dblink). 복귀를 선언합니다기록이후 모든 종류의 쿼리에 사용될 수 있습니다. 실제 열 세트 파서가 호출 쿼리에 지정되어야 합니다. 예를 들어 무엇을 알고 있습니까?*해야 한다 확장합니다.

7.2.2. 그만큼어디에서

의 구문은어디에서절 이다

어디에서검색_조건

어디에서검색_조건이다 에 정의된 모든 값 표현식섹션 4.2다음 값을 반환합니다. 유형부울.

처리 후발신절이 완료되면 파생된 가상 테이블의 각 행은 검색 조건과 비교하여 확인했습니다. 의 결과라면 조건이 true이면 행이 출력 테이블에 유지됩니다. 그렇지 않은 경우(즉, 결과가 false이거나 null인 경우)는 다음과 같습니다. 폐기되었습니다. 검색 조건은 일반적으로 다음을 참조합니다. 에서 생성된 테이블의 일부 열발신절; 이는 필수는 아니지만 그렇지 않은 경우 그만큼어디에서절은 공정할 것입니다 쓸모 없는.

참고:구현 전가입구문, 다음을 입력해야 했습니다. 에서 내부 조인의 조인 조건어디에서절. 예를 들어, 이 테이블은 표현식은 동일합니다:

FROM a, b WHERE a.id = b.id AND b.val  5

그리고

FROM a INNER JOIN b ON (a.id = b.id) WHERE b.val  5

또는 아마도

자연 조인 b WHERE b.val  5

이들 중 당신이 사용하는 것은 주로 스타일의 문제입니다. 그만큼가입구문발신절은 아마도 이식성이 좋지 않을 것입니다. 다른 SQL 데이터베이스 관리 시스템. 외부 조인의 경우 어떤 경우에도 선택의 여지가 없습니다. 해당 작업은 다음에서 수행되어야 합니다.발신절. 안켜짐/사용 중절 외부 조인은 다음과 같습니다.아님a와 동일어디조건, 왜냐하면 행 추가 결정(일치하지 않는 입력 행의 경우) 최종 결과에서 행을 제거합니다.

여기에 몇 가지 예가 있습니다.어디에서절:

c1  5인 fdt에서 ... 선택

SELECT ... FROM fdt WHERE c1 IN (1, 2, 3)

SELECT ... FROM fdt WHERE c1 IN(t2에서 c1 선택)

SELECT ... FROM fdt WHERE c1 IN (SELECT c3 FROM t2 WHERE c2 = fdt.c1 + 10)

SELECT ... FROM fdt WHERE c1 BETWEEN (SELECT c3 FROM t2 WHERE c2 = fdt.c1 + 10) AND 100

SELECT ... FROM fdt WHERE EXISTS (SELECT c1 FROM t2 WHERE c2  fdt.c1)

fdt다음에서 파생된 테이블입니다발신절. 충족하지 않는 행 의 검색 조건어디절 에서 제거됩니다.fdt. 주목하세요 스칼라 하위 쿼리를 값 표현식으로 사용합니다. 여느 것과 마찬가지로 다른 쿼리, 하위 쿼리는 복잡한 스포츠 토토을 사용할 수 있습니다. 표현. 방법도 알아보세요.fdt이다 하위 쿼리에서 참조됩니다. 적격c1asfdt.c1만 필요한 경우c1또한 하위 쿼리의 파생 입력 테이블에 있는 열입니다. 하지만 열 이름을 한정하면 그렇지 않은 경우에도 명확성이 추가됩니다. 필요합니다. 이 예에서는 열 명명 범위가 어떻게 지정되는지 보여줍니다. 외부 쿼리는 내부 쿼리로 확장됩니다.

7.2.3. 그만큼그룹별그리고가지고 있는 중

통과 후어디에서필터, 파생된 입력 테이블은 다음을 사용하여 그룹화될 수 있습니다.그룹별절 및 제거 를 사용하여 그룹 행가지고 있는 중절.

선택select_list발신 ...
    [어디에서 ...]
    그룹 기준grouping_column_reference [, grouping_column_reference]...

그룹별절은 다음과 같은 용도로 사용됩니다. 동일한 값을 공유하는 테이블의 행을 그룹화 나열된 모든 열에서. 열의 순서 나열된 것은 중요하지 않습니다. 목적은 각 그룹을 줄이는 것입니다. 공통 값을 공유하는 행을 하나의 그룹 행으로 묶습니다. 그룹의 모든 행을 대표합니다. 이는 다음과 같이 수행됩니다. 출력 및/또는 계산 집계의 중복성을 제거합니다. 이 그룹에 적용됩니다. 예를 들어:

= SELECT * FROM test1;x | 와이
---+---
 | 3
 c | 2
 비 | 5
 | 1
(4행)= test1 GROUP BY x에서 x 선택;x
---
 에이
 비
 기음
(3행)

두 번째 쿼리에서는 쓸 수 없었습니다.SELECT * FROM test1 GROUP BY x, 왜냐하면 거기에 열에 단일 값이 없습니다.y그것 각 그룹과 연관될 수 있습니다. 그룹화 기준 열은 다음과 같습니다. 알려진 정보가 있으므로 선택 목록에서 참조됩니다. 그룹당 상수 값입니다.

일반적으로 테이블을 그룹화하면 사용되지 않는 컬럼은 그룹화 내에서는 집합체 외에는 참조할 수 없습니다. 표현. 집계 표현식의 예는 다음과 같습니다.

= SELECT x, sum(y) FROM test1 GROUP BY x;x | 합집합
---+-----
 |   4
 비 |   5
 c |   2
(3행)

여기합계은 집계 함수입니다. 전체 그룹에 대해 단일 값을 계산합니다. 더 사용 가능한 집계 함수에 대한 정보는 에서 발견됨윈 토토 : 문서 :.

팁:집계 표현식 없이 그룹화 효과적으로 고유 값 집합을 계산합니다. 열. 이는 또한 다음을 사용하여 달성할 수 있습니다.독특절(참조섹션 7.3.3).

여기 또 다른 예가 있습니다: 이것은 다음에 대한 총 판매액을 계산합니다. 각 제품(모든 제품의 총 판매량이 아님).

SELECT product_id, p.name, (sum(s.units) * p.price) AS 판매
    FROM 제품 p LEFT JOIN 판매 s USING (product_id)
    GROUP BY product_id, p.name, p.price;

이 예에서는 열제품_ID, p.namep.price반드시에 있어야 합니다.그룹별절은 쿼리 선택 목록. (상품표가 얼마나 정확한지에 따라 설정되면 이름과 가격은 제품에 따라 완전히 달라질 수 있습니다. ID이므로 이론적으로 추가 그룹화는 불필요하지만 아직 구현되지 않았습니다.) 열s.units다음에 있을 필요는 없습니다.그룹별다음에서만 사용되므로 목록을 작성하세요. 집계 표현식(합계(...)), 제품의 판매를 나타냅니다. 각 제품마다, 쿼리는 제품의 모든 판매에 대한 요약 행을 반환합니다.

엄격한 SQL에서는,그룹별만 가능 소스 스포츠 토토의 열별로 그룹화하지만PostgreSQL또한 허용하도록 확장그룹별열별로 그룹화하려면 목록을 선택하세요. 단순 대신 값 표현식으로 그룹화 열 이름도 허용됩니다.

테이블이 다음을 사용하여 그룹화된 경우그룹별절, 그러나 특정 그룹만 해당 관심이 있습니다.가지고 있는 중절은 가능 다음과 같이 사용됩니다.어디절, ~에 그룹화된 테이블에서 그룹을 제거합니다. 구문은 다음과 같습니다.

선택select_list발신 ... [어디에서...] GROUP BY ... HAVINGboolean_expression

다음 표현식가지고 있는 중절 그룹화된 표현식과 그룹 해제된 표현식을 모두 참조할 수 있습니다. 표현식(반드시 집계가 포함됨) 기능).

예:

= SELECT x, sum(y) FROM test1 GROUP BY x HAVING sum(y)  3;x | 합집합
---+-----
 |   4
 비 |   5
(2행)= SELECT x, sum(y) FROM test1 GROUP BY x HAVING x < 'c';x | 합집합
---+-----
 |   4
 비 |   5
(2행)

다시 한 번 더 현실적인 예를 들어보겠습니다.

SELECT product_id, p.name, (sum(s.units) * (p.price - p.cost)) AS 이익
    FROM 제품 p LEFT JOIN 판매 s USING (product_id)
    WHERE s.date  CURRENT_DATE - 간격 '4주'
    GROUP BY product_id, p.name, p.price, p.cost
    HAVING sum(p.price * s.units)  5000;

위의 예에서,어디절이 그룹화되지 않은 열을 기준으로 행을 선택하고 있습니다( 표현식은 지난 4주 동안의 판매에만 적용됩니다.) 동안가지고 있는 중절은 다음을 제한합니다. 총 매출이 5000을 넘는 그룹으로 출력됩니다. 집계 표현식이 반드시 다음과 같을 필요는 없습니다. 쿼리의 모든 부분에서 동일합니다.