¾�ΥС�������ʸ�� �� 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

7.2. �ơ��֥뼰

�ơ��֥뼰�ϥơ��֥��׻����뤿��Τ�ΤǤ��� �ơ��֥뼰�ˤ�FROM�礬�ޤޤ�Ƥ��ꡢ���θ���˥��ץ����Ȥ���WHERE�硢GROUP BY�硢HAVING����դ��뤳�Ȥ��Ǥ��ޤ��� ñ��ʥơ��֥뼰�ϡ�ñ�˥ǥ�������Τ�������ܥơ��֥�ȸƤФ��ơ��֥�򻲾Ȥ�������Ǥ��� ���������͡�����ˡ�Ǵ��ܥơ��֥���������ꡢ�Ȥ߹�碌���ꤹ�뤿��ˤ��ʣ���ʼ�����Ѥ��뤳�Ȥ��Ǥ��ޤ���

�ơ��֥뼰�Υ��ץ����WHERE�硢GROUP BY�硢�����HAVING��ϡ�FROM������������ơ��֥����Ф��Ƽ������Ѵ���¹Ԥ���ѥ��ץ饤�����ꤷ�ޤ��� �������Ѵ��ˤ�äƲ��ۥơ��֥뤬1����������ޤ��� �����Ƥ��β��ۥơ��֥�ιԤ�����ꥹ�Ȥ��Ϥ��졢�䤤��碌�ν��ϹԤ��׻�����ޤ���

7.2.1. FROM��

FROM���ϡ�����ޤ�ʬ����줿�ơ��֥뻲�ȥꥹ�Ȥ�Ϳ������1�İʾ�Υơ��֥뤫�顢1�ĤΥơ��֥���������ޤ���

FROM table_reference [, table_reference [, ...]]

�ơ��֥뻲�Ȥϡ��ơ��֥�̾�ʥ������ޤǽ������뤳�Ȥ�Ǥ��ޤ��ˡ��ޤ��ϡ����䤤��碌���ơ��֥��硢������ʣ�����Ȥ߹�碌�ʤɤ����������줿�ơ��֥���뤳�Ȥ��Ǥ��ޤ��� FROM���ʣ���Υơ��֥뻲�Ȥ������硢�����ϡ�WHERE�硢GROUP BY�硢�����HAVING����Ѵ��Ǥ������Ū�ʲ��ۥơ��֥���뤿��˥��������ʲ����򻲾ȡˤ��졢�ǽ�Ū�ˤϥơ��֥뼰���Τη�̤Ȥʤ�ޤ���

�ơ��֥뻲�Ȥǡ��ơ��֥�ηѾ����ؤοƥơ��֥��̾������ꤹ��ȡ��ơ��֥�̾������ONLY������ɤ��ʤ����ϡ��ơ��֥뻲�ȤϤ��Υơ��֥�����Ǥʤ����λҥơ��֥�˷Ѿ����줿���٤ƤιԤ��������ޤ��� �����������λ��Ȥ�̾������ꤷ���ơ��֥�˸������Τߤ����������ҥơ��֥���ɲä��줿���̵�뤵��ޤ���

7.2.1.1. ���ơ��֥�

���ơ��֥�ϡ�2�ĤΡʼ¤ޤ��������˥ơ��֥뤫�顢���ꤷ��������ε�§�˽��ä����������ơ��֥�Ǥ��� ������硢������硢����ӥ�������礬���Ѳ�ǽ�Ǥ���

�����

���������
T1 CROSS JOIN T2

T1�����T2����Τ��٤Ƥβ�ǽ�ʹԤ��Ȥ߹�碌�ʤĤޤ�ǥ�����ѡˤ��Ф�����礵�줿�ơ��֥��T2�Τ��٤Ƥ���³��T1�Τ��٤Ƥ��󤫤�����Ԥ�ޤߤޤ��� �ơ��֥뤬���줾��N�Ԥ�M�Ԥǹ�������Ƥ���Ȥ���ȡ���礵�줿�ơ��֥�ιԿ���N * M�ԤȤʤ�ޤ���

FROM T1 CROSS JOIN T2��FROM T1, T2��Ʊ���Ǥ��� �ޤ��ʸ�ҤΡ�FROM T1 INNER JOIN T2 ON TRUE�Ȥ�Ʊ���Ǥ���

�����դ����
T1 { [INNER] | { LEFT | RIGHT | FULL } [OUTER] } JOIN T2 ON boolean_expression
T1 { [INNER] | { LEFT | RIGHT | FULL } [OUTER] } JOIN T2 USING ( join column list )
T1 NATURAL { [INNER] | { LEFT | RIGHT | FULL } [OUTER] } JOIN T2

INNER��OUTER�Ͼ�ά��ǽ�Ǥ��� INNER���ǥե���ȤȤʤ�ޤ��� LEFT��RIGHT��FULL�ϳ��������̣���ޤ���

������ϡ�ON�礫USING��ǻ��ꤹ�뤫���ޤ���NATURAL���Ҥǰ���Ū�˻��ꤷ�ޤ��� �����ϡ��ʲ��Ǿܤ�����������褦�ˡ�2�Ĥθ��Ȥʤ�ơ��֥�ΤɤιԤ�"���פ��뤫"����ޤ���

ON��ϺǤ����Ū�ʷ����Ǥ��ꡢWHERE��ǻȤ����Τ�Ʊ��������ɾ�����Ȥʤ�ޤ��� ON����ɾ�������Ȥʤ��硢T1�����T2���б�����Ԥ����פ��ޤ���

USING��ά��ˡ�Ǥ��� ����ϡ����ơ��֥뤬���̤ǻ��ĥ���ޤǶ��ڤ�줿��̾�Υꥹ�Ȥ��顢�ơ�������Ȥ߹�碌��������������Ȥ��Ʒ������ޤ��� ����ˡ�JOIN USING�ν��Ϥϡ������������Ƚ�ꤵ�줿����Ȥ߹�碌���줾����Ф���1��ȡ����θ�˳ƥơ��֥�λĤä���³���ޤ��� �ĤޤꡢUSING (a, b, c)��ON (t1.a = t2.a AND t1.b = t2.b AND t1.c = t2.c)�������Ǥ��� ��������ON��Ȥä����ϡ���̤ˤ�����a��b��c�Ϥ��줾��2�Ĥ���ˤʤ�ޤ�����USING��Ȥ��Ȥ��줾��1�Ĥ���ˤʤ�Ȥ����㳰������ޤ��ʤ�����SELECT *���Ȥ��Ƥ���Ȥ����Ϻǽ�˸���ޤ��ˡ�

�Ǹ�ˡ�NATURAL��USING��ά�������Ǥ��� 2�Ĥ����ϥơ��֥��ξ���˴ޤޤ�Ƥ��뤹�٤Ƥ���̾�ǹ��������USING�ꥹ�Ȥ�������ޤ��� USING��Ʊ�͡���������Ͻ��ϥơ��֥�˰��٤�������ޤ��� ���̤�����¸�ߤ��ʤ���硢NATURAL��CROSS JOIN��Ʊ�ͤ�ư��ޤ���

�����դ����ˤϼ��Τ�Τ�����ޤ���

INNER JOIN����������

T1�ι�R1���Ф��ơ�T2�ˤ�����R1�Ȥη������������Ƥ���Ԥ�����礵�줿�ơ��֥�˴ޤޤ�ޤ���

LEFT OUTER JOIN�ʺ���������

�ޤ���������礬�Ԥ��ޤ��� ���θ塢T2�ΤɤιԤȤη������������ʤ�T1�γƹԤˤĤ��Ƥϡ�T2�����NULL�ͤȤ��Ʒ��Ԥ��ɲä���ޤ��� �������äơ�Ϣ�뤵�줿�ơ��֥�Ͼ��T1�ιԤ��줾��˾��ʤ��Ȥ�1�ĤιԤ�����ޤ���

RIGHT OUTER JOIN�ʱ���������

�ޤ���������礬�Ԥ��ޤ��� ���θ塢T1�ΤɤιԤη������������ʤ�T2�γƹԤˤĤ��Ƥϡ�T1�����NULL�ͤȤ��Ʒ��Ԥ��ɲä���ޤ��� ����Ϻ�����ȿ�ФǤ��� ��̤Υơ��֥�ϡ�T2�ιԤ��������ޤ���

FULL OUTER JOIN�ʴ�����������

�ޤ���������礬�Ԥ��ޤ��� ���θ塢T2�ΤɤιԤη������������ʤ�T1�γƹԤˤĤ��Ƥϡ�T2�����NULL�ͤȤ��Ʒ��Ԥ��ɲä���ޤ��� ����ˡ�T1�ΤɤιԤǤ�������������ʤ�T2�γƹԤ��Ф��ơ�T1�����NULL�ͤȤ��Ʒ��Ԥ��ɲä���ޤ���

���٤Ƥη��ϡ��ߤ��˷���դ����ꡢ���뤤������Ҥˤ����ꤹ�뤳�Ȥ��Ǥ��ޤ��� T1��T2�Τɤ��餫�����뤤��ξ���������ơ��֥�ˤʤ뤳�Ȥ�����ޤ��� ��̤Ϸ��ν�������椹�뤿���JOIN����뤳�Ȥ˻Ȥ����Ȥ��Ǥ��ޤ��� ��̤��ʤ���硢JOIN��Ϻ����鱦������Ҥˤ��ޤ���

�ޤȤ�Ȥ��ơ� �ʲ��Υơ��֥�t1

 num | name
-----+------
   1 | a
   2 | b
   3 | c

����ӡ��ơ��֥�t2

 num | value
-----+-------
   1 | xxx
   3 | yyy
   5 | zzz

�����ꤹ��ȡ��ʲ��Τ褦���͡��ʷ��˴ؤ����̤������ޤ���

=> SELECT * FROM t1 CROSS JOIN t2;
 num | name | num | value
-----+------+-----+-------
   1 | a    |   1 | xxx
   1 | a    |   3 | yyy
   1 | a    |   5 | zzz
   2 | b    |   1 | xxx
   2 | b    |   3 | yyy
   2 | b    |   5 | zzz
   3 | c    |   1 | xxx
   3 | c    |   3 | yyy
   3 | c    |   5 | zzz
(9 rows)

=> SELECT * FROM t1 INNER JOIN t2 ON t1.num = t2.num;
 num | name | num | value
-----+------+-----+-------
   1 | a    |   1 | xxx
   3 | c    |   3 | yyy
(2 rows)

=> SELECT * FROM t1 INNER JOIN t2 USING (num);
 num | name | value
-----+------+-------
   1 | a    | xxx
   3 | c    | yyy
(2 rows)

=> SELECT * FROM t1 NATURAL INNER JOIN t2;
 num | name | value
-----+------+-------
   1 | a    | xxx
   3 | c    | yyy
(2 rows)

=> SELECT * FROM t1 LEFT JOIN t2 ON t1.num = t2.num;
 num | name | num | value
-----+------+-----+-------
   1 | a    |   1 | xxx
   2 | b    |     |
   3 | c    |   3 | yyy
(3 rows)

=> SELECT * FROM t1 LEFT JOIN t2 USING (num);
 num | name | value
-----+------+-------
   1 | a    | xxx
   2 | b    |
   3 | c    | yyy
(3 rows)

=> SELECT * FROM t1 RIGHT JOIN t2 ON t1.num = t2.num;
 num | name | num | value
-----+------+-----+-------
   1 | a    |   1 | xxx
   3 | c    |   3 | yyy
     |      |   5 | zzz
(3 rows)

=> SELECT * FROM t1 FULL JOIN t2 ON t1.num = t2.num;
 num | name | num | value
-----+------+-----+-------
   1 | a    |   1 | xxx
   2 | b    |     |
   3 | c    |   3 | yyy
     |      |   5 | zzz
(4 rows)

ON�ǻ��ꤵ�������ˤϡ�����ľ�ܴط����ʤ�����ޤ�뤳�Ȥ��Ǥ��ޤ��� ����ϰ������䤤��碌�ˤ����Ƥ������Ǥ��������Ѥκݤˤ����դ�ɬ�פǤ��� ��򼨤��ޤ���

=> SELECT * FROM t1 LEFT JOIN t2 ON t1.num = t2.num AND t2.value = 'xxx';
 num | name | num | value
-----+------+-----+-------
   1 | a    |   1 | xxx
   2 | b    |     |
   3 | c    |     |
(3 rows)

WHERE����������򵭽Ҥ���Ȱۤʤ��̤ˤʤ뤳�Ȥ����դ��Ƥ���������

=> SELECT * FROM t1 LEFT JOIN t2 ON t1.num = t2.num WHERE t2.value = 'xxx';
 num | name | num | value
-----+------+-----+-------
   1 | a    |   1 | xxx
(1 row)

������ͳ��ON����������Ϸ������˽������졢����WHERE����������Ϸ������˽�������뤳�Ȥˤ��ޤ���

7.2.1.2. �ơ��֥�������̾

�ơ��֥��ʣ���ʥơ��֥뻲�Ȥϡ��䤤��碌�θ�����������ơ��֥�򻲾Ȥ��뤿��˰��Ū��̾����Ϳ���뤳�Ȥ��Ǥ��ޤ��� ������ơ��֥����̾�ȸƤӤޤ���

�ơ��֥����̾���������ˤϰʲ��Τ褦�ˤ��ޤ���

FROM table_reference AS alias

�⤷����

FROM table_reference alias

AS������ɤϤʤ��Ƥ⹽��ʤ��Υ����Ǥ��� alias��Ǥ�դμ��̻Ҥˤʤ�ޤ���

�ơ��֥����̾�ΰ���Ū��Ŭ��ˡ�ϡ�Ĺ���ơ��֥�̾��û�̤������̻Ҥ������ƤƷ�����ɤߤ䤹�����뤳�ȤǤ��� ��򼨤��ޤ���

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;    -- wrong

�ơ��֥����̾�ϼ��ɽ�����ñ�ˤ��뤿��ˤ���ޤ��� ���������Τ褦�ˡ�1�ĤΥơ��֥뤬��ʬ���Ȥȷ�礹����ϡ�ɬ�ܤȤʤ�ޤ���

SELECT * FROM people AS mother JOIN people AS child ON mother.id = child.mother_id;

����ˡ��ơ��֥뻲�Ȥ����䤤��碌��項7.2.1.3�򻲾ȡˤξ�����̾��ɬ�פˤʤ�ޤ���

��̤�ۣ�椵��ʤ�������˻Ȥ��ޤ��� ������Ǥϡ��ǽ��ʸ��2���ܤ�my_table�Υ��󥹥��󥹤�b�Ȥ�����̾����Ϳ����������2���ܤ�ʸ�ǤϷ���̤��Ф�����̾����Ϳ���Ƥ��ޤ���

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

���Τ褦�ʷ����ǥơ��֥���̾���դ��ơ��ơ��֥뼫�Ȥ�Ʊ�ͤ˥ơ��֥����˰��Ū��̾�����դ��뤳�Ȥ��Ǥ��ޤ���

FROM table_reference [AS] alias ( column1 [, column2 [, ...]] )

�⤷���ºݤΥơ��֥뤬��������⾯�ʤ����������̾��Ϳ�������硢�Ĥ����ϲ�̾����ޤ��� ���ι�ʸ�ϡ����ʷ�礢�뤤�����䤤��碌���ä���Ω���ޤ���

��̾��JOIN��η�̤�Ŭ�Ѥ�����硢��̾��JOIN��ǻ��Ȥ���븵����̾�򱣤��ޤ��� �ʲ�����򼨤��ޤ���

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

�������FROM table1 AS alias_name��Ʊ���Ǥ��� ����˶�̣�����������Ȥ��ơ����䤤��碌�����롼�ײ��佸���ޤ�Ǥ����硢ñ����ˤޤȤ�뤳�ȤϤǤ��ʤ��Ȥ������Ȥ�����ޤ���

�ޤ������䤤��碌��VALUES�ꥹ�ȤȤ��뤳�Ȥ�Ǥ��ޤ���

FROM (VALUES ('anne', 'smith'), ('bob', 'jones'), ('joe', 'blow'))
     AS names(first, last)

�����֤��ޤ������ơ��֥����̾��ɬ�פǤ��� VALUES�ꥹ�Ȥ������̾����Ϳ���뤳�ȤϾ�ά���뤳�Ȥ�Ǥ��ޤ�������Ϳ���뤳�Ȥ򴫤�ޤ��� 項7.7�򻲾Ȥ��Ƥ���������

7.2.1.4. �ơ��֥�ؿ�

�ơ��֥�ؿ��ϡ����ܥǡ������ʥ����鷿�ˡ��⤷����ʣ��ǡ������ʥơ��֥�ԡˤ���ʤ�Ԥν������������ؿ��Ǥ��� �����ϡ��ơ��֥롢�ӥ塼���䤤��碌��FROM��������䤤��碌�Τ褦�˻��Ѥ���ޤ��� �ơ��֥�ؿ������֤������ϡ��ơ��֥롢�ӥ塼�����䤤��碌���Ʊ�ͤμ��ǡ�SELECT��JOIN��WHERE����˴ޤ�뤳�Ȥ��Ǥ��ޤ���

�ơ��֥�ؿ������ܥǡ��������֤���硢ñ��η����̾�ϴؿ�̾�˰��פ��ޤ��� �ؿ���ʣ�緿���֤����ϡ������Ϥ��η��θġ���°����Ʊ��̾���ˤʤ�ޤ���

FROM��ǥơ��֥�ؿ�����̾���դ��뤳�Ȥ⡢��̾���դ����ˤ��Τޤ޻��Ѥ��뤳�Ȥ�Ǥ��ޤ��� ��̾���դ�����FROM��Ǵؿ�����Ѥ�����硢�ؿ�̾�����ϥơ��֥�̾�Ȥ��ƻ��Ѥ���ޤ���

�ʲ��˿��㼨���ޤ���

CREATE TABLE foo (fooid int, foosubid int, fooname text);

CREATE FUNCTION getfoo(int) RETURNS SETOF foo AS $$
    SELECT * FROM foo WHERE fooid = $1;
$$ LANGUAGE SQL;

SELECT * FROM getfoo(1) AS t1;

SELECT * FROM foo
    WHERE foosubid IN (
                        SELECT foosubid
                        FROM getfoo(foo.fooid) z
                        WHERE z.fooid = foo.fooid
                      );

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

SELECT * FROM vw_getfoo;

�ƤӽФ���ˡ�˱����ưۤʤ��󽸹���֤��ơ��֥�ؿ���������뤳�Ȥ����Ω�ľ�礬����ޤ��� ����򥵥ݡ��Ȥ���ˤϡ��ơ��֥�ؿ���record���۷����֤���Τ�������ޤ��� ���������ؿ����䤤��碌�ǻ��Ѥ����硢�����ƥब�����䤤��碌��ɤΤ褦�˲��Ϥ��ײ���������Ф褤�Τ���Ƚ�ǤǤ���褦�ˡ����ꤷ���Թ�¤���䤤��碌������˻��ꤷ�ʤ���Фʤ�ޤ��� ������ǹͤ��Ƥߤޤ��礦��

SELECT *
    FROM dblink('dbname=mydb', 'SELECT proname, prosrc FROM pg_proc')
      AS t1(proname name, prosrc text)
    WHERE proname LIKE 'bytea%';

dblink�ؿ���dblink�⥸�塼��ΰ����ˤϱ���䤤��碌��¹Ԥ��ޤ��� �����Ǥ�դ��䤤��碌�ǻ��ѤǤ���褦�ˡ�record���֤���Τ��������Ƥ��ޤ��� �ºݤ��󽸹�ϡ��ѡ������㤨��*���ɤΤ褦��Ÿ������뤫������Ǥ���褦�ˡ��ƤӽФ����䤤��碌��ǻ��ꤵ��ʤ���Фʤ�ޤ���

7.2.2. WHERE��

WHERE���ι�ʸ�ϰʲ����̤�Ǥ���

WHERE search_condition

�����ǡ�search_condition�ˤ�boolean�����֤��ɤΤ褦��ɾ������項4.2�򻲾ȡˤ����Ǥ��ޤ���

FROM��ν���������ä��塢�����������ۥơ��֥�γƹԤϸ������Ⱦȹ礵��ޤ��� ���η�̤����ξ�硢���ιԤϽ��Ϥ���ޤ��� �����Ǥʤ��ʤ��ʤ����̤����ޤ���NULL�Ρ˾��ϡ����ιԤϼΤƤ��ޤ��� ����Ū�˸������ϡ�FROM����������줿�ơ��֥�κ��㣱��򻲾Ȥ��ޤ��� �����ɬ�ܤǤϤ���ޤ��󤬡��������ʤ���WHERE��Ϥޤä�����̣���ʤ��ʤ�ޤ���

注意: �������η����ϡ�WHERE��Ǥ�JOIN��Ǥ⵭�Ҥ��뤳�Ȥ��Ǥ��ޤ��� �㤨�С��ʲ��Υơ��֥뼰�������Ǥ���

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

�ޤ����ʲ��Ǥ�Ʊ���Ǥ���

FROM a NATURAL JOIN b WHERE b.val > 5

�ɤ��Ȥ����ϡ���˥������������Ǥ��� FROM���JOIN��ʸ����Ѥ���ȡ�SQLɸ��Ǥ��äƤ⤪���餯¾��SQL�ǡ����١������������ƥ�˰ܿ��Ǥ��ޤ��� �������ˤĤ��Ƥϡ�FROM��ʳ��������;�ϤϤ���ޤ��� ��������ON��ޤ���USING��ϡ�WHERE���Ȥ�����������ޤ����� �ʤ��ʤ顢�ǽ���̤ǤιԤ������Ʊ�ͤˡ��ʰ��פ��ʤ����ϹԤ��Ф���˹Ԥ��ɲäȤʤ뤫��Ǥ���

WHERE������ʲ��˼����ޤ���

SELECT ... FROM fdt WHERE c1 > 5

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

SELECT ... FROM fdt WHERE c1 IN (SELECT c1 FROM t2)

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��FROM����������줿�ơ��֥�Ǥ��� WHERE��θ��������������ʤ��ä��Ԥϡ�fdt����������ޤ��� ɾ�����Ȥ��ƤΥ��������䤤��碌�λȤ��������ܤ��Ƥ��������� ¾���䤤��碌�Τ褦�ˡ����䤤��碌��ʣ���ʥơ��֥뼰��Ȥ����Ȥ��Ǥ��ޤ��� ���䤤��碌����ǤɤΤ褦��fdt�����Ȥ���뤫�ˤ����դ��Ƥ��������� c1��fdt.c1�Τ褦�˽������뤳�Ȥϡ�c1�����䤤��碌�����ϥơ��֥뤫������������̾�Ǥ⤢����ˤ���ɬ�פǤ��� ��̾�ν����ϡ�ɬ�ܤξ��ǤϤʤ��Ƥ⡢���Τˤ��뤿�����Ω���ޤ��� ������ϡ���¦���䤤��碌����̾��ͭ���ϰϤ򡢤ɤΤ褦�ˤ�����¦���䤤��碌�ޤdz�ĥ���뤫�򼨤��ޤ���

7.2.3. GROUP BY��HAVING��

WHERE�ե��륿���̤����塢�������줿���ϥơ��֥��GROUP BY��ǥ��롼�ײ������ޤ���HAVING�����Ѥ������פʥ��롼�פ���������Ȥ��Ǥ��ޤ���

SELECT select_list
    FROM ...
    [WHERE ...]
    GROUP BY grouping_column_reference [, grouping_column_reference]...

GROUP BY���ϡ��ơ��֥�������򤵤줿�����Ʊ���ͤ��ͭ����Ԥ�ޤȤ�ƥ��롼�ײ����뤿��˻��Ѥ���ޤ��� �������ϴط�����ޤ��� ����϶��̤����ͤ���Ĥ��줾��ιԤν���򥰥롼����Τ��٤ƤιԤ���ɽ���룱�ĤΥ��롼�׹ԤˤޤȤ����̤�����ޤ��� ����ˤ�ꡢ���Ϥξ�Ĺ�٤��ӽ���������ˤޤ��������Υ��롼�פ�Ŭ�Ѥ���뽸�󤬷׻�����ޤ��� �ʲ�����򼨤��ޤ���

=> SELECT * FROM test1;
 x | y
---+---
 a | 3
 c | 2
 b | 5
 a | 1
(4 rows)

=> SELECT x FROM test1 GROUP BY x;
 x
---
 a
 b
 c
(3 rows)

2���ܤ��䤤��碌�Ǥϡ�SELECT * FROM test1 GROUP BY x�Ƚ񤯤��ȤϤǤ��ޤ��� �ƥ��롼�פ˴�Ϣ�դ�������y���ͤ��ʤ�����Ǥ��� ���롼�פ��Ȥ�ñ����ͤ���ĤΤǡ�����ꥹ�Ȥ�GROUP BY�ǻ��ꤷ����򻲾Ȥ��뤳�Ȥ��Ǥ��ޤ���

����Ū�ˡ��ơ��֥뤬���롼�ײ�����Ƥ����硢GROUP BY�ǥꥹ�Ȥ���Ƥ��ʤ���Ͻ��󼰤�����ƻ��Ȥ��뤳�ȤϤǤ��ޤ��� ���󼰤���ϰʲ����̤�Ǥ���

=> SELECT x, sum(y) FROM test1 GROUP BY x;
 x | sum
---+-----
 a |   4
 b |   5
 c |   2
(3 rows)

�嵭��sum() �ϡ����롼�����ΤˤĤ���ñ����ͤ�׻����뽸��ؿ��Ǥ��� ���Ѳ�ǽ�ʽ���ؿ��ξܺ٤ˤĤ��Ƥϡ�項9.18�򻲾Ȥ��Ƥ���������

ティップ: ���󼰤���Ѥ��ʤ����롼�ײ��ϡ�����ν�ʣ���ʤ��ͤν�����Ψ�ɤ��׻����ޤ��� �����DISTINCT���項7.3.3�򻲾ȡˤλ��Ѥ�Ʊ���褦��ã�����뤳�Ȥ��Ǥ��ޤ���

�̤���򼨤��ޤ��� ����ϳ����ʤ�������׻����ޤ� �������ʤ������ǤϤ���ޤ���ˡ�

SELECT product_id, p.name, (sum(s.units) * p.price) AS sales
    FROM products p LEFT JOIN sales s USING (product_id)
    GROUP BY product_id, p.name, p.price;

������Ǥϡ�product_id��p.name��p.price���ɬ��GROUP BY��ǻ��ꤹ��ɬ�פ�����ޤ��� �ʤ��ʤ顢�������䤤��碌����ꥹ�ȡʸ�ҡˤ���ǻȤ��Ƥ��뤫��Ǥ��� s.units���GROUP BY�ǻ��ꤹ��ɬ�פϤ���ޤ��� ����ϡ����ʤ��Ȥ����׻��ν��󼰡�sum(...)�ˤ�������ǻȤ��뤿��Ǥ��� �����䤤��碌�ϡ������ʤ��Ф������ʤ�������˴ؤ����׹Ԥ��֤���ޤ���

products�ơ��֥뤬���Τ褦�ˡ��Ĥޤ�product_id���ץ饤�ޥꥭ���Ǥ���褦�����ꤵ��Ƥ����硢name��price�������ID��product_id�ˤ��ؿ���¸���Ƥ��ꡢ���Τ�������ID���롼�פ��줾����Ф��Ƥɤ�name��price���ͤ��֤����˴ؤ��뤢���ޤ���������ޤ���Τǡ������Ǥ�product_id�ǥ��롼�ײ����뤳�Ȥǽ�ʬ�Ǥ���

��̩��SQL�Ǥϡ�GROUP BY�ϡ����Ȥʤ�ơ��֥����ˤ�äƤΤߥ��롼�ײ��Ǥ��ޤ�����PostgreSQL�Ǥϡ�����ꥹ�Ȥ���ˤ�륰�롼�ײ���Ǥ���褦�˳�ĥ����Ƥ��ޤ��� ñ�����̾������ˡ�ɾ�����ǥ��롼�ײ����뤳�Ȥ�Ǥ��ޤ���

GROUP BY��Ȥäƥ��롼�ײ����줿�ơ��֥������Υ��롼�פΤ�ɬ�פʾ�硢��̤������פʥ��롼�פ�����Τˡ�WHERE��Τ褦��HAVING���Ȥ����Ȥ��Ǥ��ޤ��� ��ʸ�ϰʲ����̤�Ǥ���

SELECT select_list FROM ... [WHERE ...] GROUP BY ... HAVING boolean_expression

HAVING����μ��ϡ����롼�ײ����줿���ȥ��롼�ײ�����Ƥʤ����ʤ��ξ��Ͻ���ؿ���ɬ�פˤʤ�ޤ��ˤ�ξ���򻲾Ȥ��뤳�Ȥ��Ǥ��ޤ���

��򼨤��ޤ���

=> SELECT x, sum(y) FROM test1 GROUP BY x HAVING sum(y) > 3;
 x | sum
---+-----
 a |   4
 b |   5
(2 rows)

=> SELECT x, sum(y) FROM test1 GROUP BY x HAVING x < 'c';
 x | sum
---+-----
 a |   4
 b |   5
(2 rows)

���ˡ���긽��Ū����򼨤��ޤ���

SELECT product_id, p.name, (sum(s.units) * (p.price - p.cost)) AS profit
    FROM products p LEFT JOIN sales s USING (product_id)
    WHERE s.date > CURRENT_DATE - INTERVAL '4 weeks'
    GROUP BY product_id, p.name, p.price, p.cost
    HAVING sum(p.price * s.units) > 5000;

�����ǡ�WHERE��ϡ����롼�ײ�����Ƥ��ʤ���ˤ�äƹԤ����򤷤Ƥ���ʤ��μ��ǤϺǶ��4���֤����Τߤ����ˤʤ�ޤ��ˤΤ��Ф���HAVING��Ͻ��Ϥ����⤬5000��Ķ���륰�롼�פ����¤��Ƥ��ޤ��� ���󼰤����䤤��碌��Ǿ��Ʊ���Ǥ���ɬ�פ��ʤ����Ȥ����դ��Ƥ���������

�����䤤��碌������ؿ���ޤ�Ǥ��뤬GROUP BY�礬�ʤ����Ǥ⡢���롼�ײ��ϰ����Ȥ��ƹԤ��ޤ��� ��̤�ñ�쥰�롼�׹ԡʤޤ���HAVING��ñ��Ԥ���������С��Ԥ�¿ʬ�����ʤ��ʤ�ˤȤʤ�ޤ��� HAVING���ޤ�Ǥ���С�����ؿ��ƤӽФ���GROUP BY�礬�ޤä���¸�ߤ��ʤ��Ƥ�Ʊ�����Ȥ������ޤ���

7.2.4. ������ɥ��ؿ�����

�䤤��碌��������ɥ��ؿ���項3.5��項9.19��項4.2.8�򻲾ȡˤ�ޤ�Ǥ���С������δؿ��ϥ��롼�ײ������󤪤��HAVING��︡�����Ԥ�줿���ɾ������ޤ��� �Ĥޤꡢ�䤤��碌�����餫�ν���GROUP BY�ޤ���HAVING����Ѥ��Ƥ���С�������ɥ��ؿ��ˤ�긫����Ԥ�FROM/WHERE�Ǥ�����Υơ��֥�ԤǤϤʤ������롼�׹ԤȤʤ�ޤ���

ʣ���Υ�����ɥ��ؿ������Ѥ��줿��硢���Υ�����ɥ�����ˤ��빽ʸŪ��Ʊ���Ǥ���PARTITION BY�����ORDER BY�����Ĥ��٤ƤΥ�����ɥ��ؿ��ϡ��ǡ������Τ��Ϥä�ñ��μ¹Լ��ˤ��ɾ������뤳�Ȥ��ݾڤ���Ƥ��ޤ��� �������äơ�ORDER BY�����Ū�˽���դ�����ꤷ�ʤ��Ƥ�Ʊ����¤��ؤ�����դ��򸫤뤳�Ȥ��Ǥ��ޤ��� ���������ۤʤ�PARTITION BY�ޤ���ORDER BY���ͤ���Ĵؿ���ɾ���ˤĤ��Ƥ��ݾڤ���ޤ��� �ʤ��Τ褦�ʾ�硢�¤��ؤ���礬������ɥ��ؿ�ɾ���ν����֤ǰ���Ū��ɬ�פȤʤꡢORDER BY��������Ƚ�Ǥ���Ԥν���դ�����¸����褦���¤��ؤ����ݾڤ���ޤ��󡣡�

�������Ǥϡ�������ɥ��ؿ��Ͼ�˻������¤��ؤ���줿�ǡ�����ɬ�פȤ���Τǡ��䤤��碌���Ϥϥ�����ɥ��ؿ���PARTITION BY/ORDER BY��Τɤ줫���Ĥ˽��äƽ���դ�����ޤ��� �ȤϤ���������˰�¸���뤳�Ȥ�������ޤ��� �μ¤˷�̤��������ˡ���¤��ؤ�����褦�ˤ������ΤǤ���С�����Ū�ʺǾ峬�ؤ�ORDER BY����Ѥ��ޤ���