A 스포츠 토토 결과 표현식테이블을 계산합니다. 스포츠 토토 결과 표현식에는발신선택적으로 뒤에 오는 절어디, 그룹별및가지고 있는절. 사소한 스포츠 토토 결과 표현식은 단순히 소위 기본 스포츠 토토 결과이라고 하는 디스크의 스포츠 토토 결과을 나타냅니다. 스포츠 토토 결과이지만 더 복잡한 표현식을 사용하여 수정하거나 다양한 방법으로 기본 스포츠 토토 결과을 결합합니다.
선택사항어디, 그룹별및가지고 있는 중스포츠 토토 결과 표현식의 절은 연속적인 파이프라인을 지정합니다. 에서 파생된 테이블에서 수행된 변환발신절. 이러한 모든 변환은 다음을 생성합니다. 전달되는 행을 제공하는 가상 테이블 쿼리의 출력 행을 계산하려면 목록을 선택하세요.
그발신 조항주어진 하나 이상의 다른 스포츠 토토 결과에서 스포츠 토토 결과을 파생합니다. 쉼표로 구분된 스포츠 토토 결과 참조 목록에 있습니다.
발신스포츠 토토 결과_참조 [, 스포츠 토토 결과_참조 [, ...]]
스포츠 토토 결과 참조는 스포츠 토토 결과 이름일 수 있습니다(아마도 스키마 한정) 또는 하위 쿼리와 같은 파생 스포츠 토토 결과 스포츠 토토 결과 조인 또는 이들의 복잡한 조합. 1개 이상인 경우 스포츠 토토 결과 참조는에 나열되어 있습니다.발신절은 서로 결합되어(아래 참조) 다음을 형성합니다. 이후에 적용될 수 있는 중간 가상 테이블 에 의한 변환어디, 그룹별및가지고 있는 중절이며 마지막으로 다음의 결과입니다. 전체 스포츠 토토 결과 표현식입니다.
스포츠 토토 결과 참조가 상위 스포츠 토토 결과의 이름을 지정할 때 스포츠 토토 결과 상속 계층 구조, 스포츠 토토 결과 참조가 행을 생성합니다. 해당 스포츠 토토 결과뿐만 아니라 해당 스포츠 토토 결과의 모든 하위 스포츠 토토 결과에도 적용됩니다. 핵심 단어만테이블 앞에 위치 이름. 그러나 참조는 다음과 같은 열만 생성합니다. 명명된 테이블에 나타납니다. 하위 테이블에 추가된 모든 열은 무시됩니다.
글을 쓰는 대신만이전 테이블 이름은 쓸 수 있습니다.*이후 하위 테이블이 다음임을 명시적으로 지정하는 테이블 이름 포함됩니다. 쓰기*필요하지 않음 해당 동작이 기본값이므로(변경하지 않은 경우) 의 설정sql_inheritance구성 옵션). 그러나 쓰기*추가적인 내용을 강조하는 데 유용할 수 있습니다. 스포츠 토토 결과이 검색됩니다.
조인된 스포츠 토토 결과은 다른 두 개(실제 또는 파생) 특정 조인 규칙에 따른 스포츠 토토 결과 유형. 내부, 외부 및 교차 조인을 사용할 수 있습니다.
조인 유형
T1교차 조인T2
다음의 각 행 조합에 대해T1그리고T2, 파생 스포츠 토토 결과은 의 모든 열로 구성된 행을 포함합니다.T1다음에 모든 열이 옵니다.T2. 스포츠 토토 결과이 있는 경우 각각 N 및 M 행, 조인된 스포츠 토토 결과은 N 개를 갖습니다. * M행.
발신T1교차 조인T2다음과 동일함발신T1, T2. 또한 다음과 같습니다.발신T1내부 조인T2참으로 설정(아래 참조).
T1 { [내부] | 왼쪽 | 맞다 | 전체 [외부] 가입T2켜짐boolean_expression
T1 { [내부] | 왼쪽 | 맞다 | 전체 [외부] 가입T2사용 중(열 목록 조인 )
T1자연스러운 [내부] | 왼쪽 | 맞다 | 전체 [외부] 가입T2
말씀내부그리고외부모두 선택사항입니다. 양식.내부기본값입니다.왼쪽, 오른쪽및전체외부 조인을 암시합니다.
그조인 조건이다 에 지정됨켜짐또는사용 중절 또는 암시적으로 단어자연스러운. 조인 조건은 두 소스의 행을 결정합니다. 테이블은 다음으로 간주됩니다."일치"자세히 설명한대로 아래.
그켜짐절이 가장 많습니다. 일반적인 종류의 조인 조건: 부울을 사용합니다. a에 사용된 것과 동일한 종류의 값 표현식어디절. 한 쌍의 행 에서T1그리고T2일치하는 경우켜짐표현식은 다음에 대해 true로 평가됩니다. 그들.
사용 중약칭입니다 표기법: 쉼표로 구분된 열 목록을 사용합니다. 조인된 테이블이 공통적으로 가져야 하는 이름 각각의 동등성을 지정하는 조인 조건을 형성합니다. 이 열 쌍. 또한, a의 출력다음을 사용하여 가입다음에 대한 열이 하나 있습니다. 각 입력 열의 동일한 쌍과 그 뒤에 각 테이블의 다른 모든 열. 따라서,(a, b, c) 사용동등함 에ON(t1.a = t2.a AND t1.b = t2.b 그리고 t1.c = t2.c)다음 경우를 제외하고ON두 개가 사용됩니다. 열a, b및c에 결과, 반면에사용 중각각 하나씩만 있을 것입니다.
마지막으로,자연스러운은의 약어입니다.사용 중: 그것은 다음을 형성합니다사용 중정확히 다음으로 구성된 목록 두 입력 테이블 모두에 나타나는 열 이름입니다. 마찬가지로사용 중, 다음 열이 나타납니다. 출력 테이블에 한 번만 표시됩니다.
적격한 조인의 가능한 유형은 다음과 같습니다:
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 | c
그리고t2:
번호 | 가치 ------+------- 1 | xxx 3 | 이야 5 | zzz
그러면 다양한 항목에 대해 다음과 같은 결과를 얻습니다. 조인:
= SELECT * FROM t1 CROSS JOIN t2;번호 | 이름 | 숫자 | 가치
------+------+------+-------
1 | | 1 | xxx
1 | | 3 | 이야
1 | | 5 | zzz
2 | 비 | 1 | xxx
2 | 비 | 3 | 이야
2 | 비 | 5 | zzz
3 | c | 1 | xxx
3 | c | 3 | 이야
3 | c | 5 | zzz
(9행)= SELECT * FROM t1 INNER JOIN t2 ON t1.num = t2.num;번호 | 이름 | 숫자 | 가치
------+------+------+-------
1 | | 1 | xxx
3 | c | 3 | 이야
(2행)= SELECT * FROM t1 INNER JOIN t2 USING (num);번호 | 이름 | 가치
------+------+-------
1 | | xxx
3 | c | 이야
(2행)= SELECT * FROM t1 NATURAL INNER JOIN t2;번호 | 이름 | 가치
------+------+-------
1 | | xxx
3 | c | 이야
(2행)= SELECT * FROM t1 LEFT JOIN t2 ON t1.num = t2.num;번호 | 이름 | 숫자 | 가치
------+------+------+-------
1 | | 1 | xxx
2 | 비 | |
3 | c | 3 | 이야
(3행)= SELECT * FROM t1 LEFT JOIN t2 USING (num);번호 | 이름 | 가치
------+------+-------
1 | | xxx
2 | 비 |
3 | c | 이야
(3행)= SELECT * FROM t1 오른쪽 JOIN t2 ON t1.num = t2.num;번호 | 이름 | 숫자 | 가치
------+------+------+-------
1 | | 1 | xxx
3 | c | 3 | 이야
| | 5 | zzz
(3행)= SELECT * FROM t1 FULL JOIN t2 ON t1.num = t2.num;번호 | 이름 | 숫자 | 가치
------+------+------+-------
1 | | 1 | xxx
2 | 비 | |
3 | c | 3 | 이야
| | 5 | zzz
(4행)
다음으로 지정된 조인 조건ON또한 다음 조건을 포함할 수 있습니다. 조인과 직접 관련이 있습니다. 이것은 일부에게 유용할 수 있습니다. 질문이 있지만 신중하게 생각해야 합니다. 에 대한 예:
= SELECT * FROM t1 LEFT JOIN t2 ON t1.num = t2.num AND t2.value = 'xxx';번호 | 이름 | 숫자 | 가치 ------+------+------+------- 1 | | 1 | xxx 2 | 비 | | 3 | c | | (3행)
스포츠 토토 결과 및 복잡한 스포츠 토토 결과에 임시 이름을 부여할 수 있습니다. 파생 스포츠 토토 결과에 대한 참조에 사용되는 참조 나머지 쿼리. 이것을 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이것은 다음과 같은 경우 오류가 발생합니다.add_missing_from구성 변수는꺼짐(그대로 기본적으로)입니다. 그렇다면켜짐, 암시적 스포츠 토토 결과 참조가에 추가됩니다.발신절이므로 쿼리는 다음과 같이 처리됩니다. 다음과 같이 작성되었습니다:
SELECT * FROM my_table AS m, my_table AS my_table WHERE my_table.a 5;
그렇게 하면 일반적으로 그렇지 않은 교차 조인이 발생합니다. 당신이 원하는 것.
스포츠 토토 결과 별칭은 주로 표기상의 편의를 위한 것이지만 테이블 자체를 조인할 때 이를 사용해야 합니다. 예:
SELECT * FROM people AS mother JOIN people AS child ON mother.id = child.mother_id;
또한 테이블 참조인 경우 별칭이 필요합니다. 하위 쿼리입니다(참조섹션 7.2.1.3).
괄호는 모호성을 해결하는 데 사용됩니다. 에서 다음 예에서는 첫 번째 문에서 별칭을 할당합니다.b두 번째 인스턴스로내_스포츠 토토 결과, 하지만 두 번째 문은 조인 결과에 별칭을 할당합니다.
SELECT * FROM my_table AS a CROSS JOIN my_table AS 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.2.) 예:
FROM (SELECT * FROM table1) AS alias_name
이 예는 다음과 같습니다.발신 table1 AS alias_name. 더 흥미로운 사례는 다음과 같습니다. 일반 조인으로 축소할 수 없으며 하위 쿼리가 발생할 때 발생합니다. 그룹화 또는 집계가 포함됩니다.
하위 쿼리는 다음과 같을 수도 있습니다.값목록:
FROM (VALUES ('앤', '스미스'), ('밥', '존스'), ('조', '블로우'))
AS 이름(이름, 성)
다시 말하지만, 스포츠 토토 결과 별칭이 필요합니다. 별칭 이름 할당 의 열값목록은 다음과 같습니다 선택 사항이지만 좋은 습관입니다. 자세한 내용은 참조스포츠 토토 베트맨 : 문서 : 8.3 : 값 목록.
테이블 함수는 일련의 행을 생성하는 함수입니다. 기본 데이터 유형(스칼라 유형) 또는 복합 데이터 유형으로 구성됨 데이터 유형(테이블 행). 테이블, 뷰 또는 의 하위 쿼리발신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). 복귀를 선언합니다기록이후 모든 종류의 쿼리에 사용될 수 있습니다. 실제 열 세트 파서가 호출 쿼리에 지정되어야 합니다. 예를 들어 무엇을 알고 있습니까?*해야 한다 확장합니다.
의 구문은WHERE 절is
어디에서검색_조건
어디에서검색_조건이다 모든 값 표현식(참조섹션 4.233732_33769부울.
처리 후발신절이 완료되면 파생된 가상 테이블의 각 행은 검색 조건과 비교하여 확인했습니다. 의 결과라면 조건이 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또한 하위 쿼리의 파생 입력 테이블에 있는 열입니다. 하지만 열 이름을 한정하면 그렇지 않은 경우에도 명확성이 추가됩니다. 필요합니다. 이 예에서는 열 명명 범위가 어떻게 지정되는지 보여줍니다. 외부 쿼리는 내부 쿼리로 확장됩니다.
통과 후어디에서필터, 파생 입력 테이블은 다음을 사용하여 그룹화될 수 있습니다.그룹별절 및 제거 를 사용하여 그룹 행가지고 있는 중절.
선택select_list발신...
[어디에서 ...]
그룹 기준grouping_column_reference [, grouping_column_reference]...
그그룹 BY 조항테이블의 해당 행을 그룹화하는 데 사용됩니다. 나열된 모든 열에서 동일한 값을 공유합니다. 주문 어떤 열이 나열되는지는 중요하지 않습니다. 효과는 공통 값을 공유하는 각 행 집합을 하나로 결합합니다. 그룹의 모든 행을 나타내는 그룹 행입니다. 이 출력 및/또는 계산의 중복성을 제거하기 위해 수행됩니다. 이러한 그룹에 적용되는 집계입니다. 예를 들어:
= 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행)
여기합계집계 함수입니다. 전체 그룹에 대해 단일 값을 계산합니다. 더보기 사용 가능한 집계 함수에 대한 정보는 에서 발견됨PostgreSQL :.
팁:집계 표현식 없이 그룹화 효과적으로 고유한 값 집합을 계산합니다. 칼럼. 이는 또한 다음을 사용하여 달성할 수 있습니다.독특절(참조섹션 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.name및p.가격반드시에 있어야 합니다.그룹별절은 쿼리 선택 목록. (상품표가 얼마나 정확한지에 따라 이름과 가격은 설정에 따라 완전히 달라질 수 있습니다. 제품 ID이므로 이론적으로 추가 그룹화는 불필요하지만 아직 구현되지 않았습니다.) 열s.units다음에 있을 필요는 없습니다.그룹별다음에서만 사용되므로 목록을 작성하세요. 집계 표현식(합계(...)), 제품의 판매를 나타냅니다. 각 제품마다, 쿼리는 제품의 모든 판매에 대한 요약 행을 반환합니다.
엄격한 SQL에서는,그룹별만 가능 소스 스포츠 토토 결과의 열별로 그룹화하지만포스트그레SQL또한 허용하도록 확장그룹별열별로 그룹화하려면 목록을 선택하세요. 단순 대신 값 표현식으로 그룹화 열 이름도 허용됩니다.
테이블이 다음을 사용하여 그룹화된 경우그룹별절, 그러나 특정 그룹만 해당 관심이 있습니다.가지고 있는 중절은 가능 다음과 같이 사용됩니다.어디절, ~에 그룹화된 테이블에서 그룹을 제거합니다. 구문은 다음과 같습니다.
선택select_list발신 ... [어디에서 ...] 그룹 기준 ... 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을 넘는 그룹으로 출력됩니다. 집계 표현식이 반드시 다음과 같을 필요는 없습니다. 쿼리의 모든 부분에서 동일합니다.