PostgreSQL 9.3.2ʸ�� | ||||
---|---|---|---|---|
前のページ | 上に戻る | 第 3章���٤ʽ���ǽ | 次のページ |
������ɥ��ؿ��ϸ��ߤιԤ˲��餫�Ȥ�ط�����ơ��֥�Ԥΰ�Ż�ޤ����̤η���Ԥ��ޤ��� ����Ͻ���ؿ��ˤ��Ԥ�����η����Ȼ����褦�ʤ�ΤǤ��� �Ȥϸ��äƤ⡢�̾�ν���ؿ��Ȥϰۤʤꡢ������ɥ��ؿ��λ��Ѥ�ñ����ϹԤ˹Ԥ롼�ײ����ޤ��� �ԤϤ��줾����̤οȸ���ݻ����ޤ��� ¦�Ǥϡ�������ɥ��ؿ����䤤��碌��̤ˤ�븽�߹Ԥ����Ǥʤ�������ʾ�ιԤ˥����������뤳�Ȥ��Ǥ��ޤ���
����Ϥ��������ʿ�ѵ�Ϳ�Ȥ��줾��ν��Ȱ��ε�Ϳ��ɤΤ褦����Ӥ��뤫������Ǥ���
SELECT depname, empno, salary, avg(salary) OVER (PARTITION BY depname) FROM empsalary;
depname | empno | salary | avg -----------+-------+--------+----------------------- develop | 11 | 5200 | 5020.0000000000000000 develop | 7 | 4200 | 5020.0000000000000000 develop | 9 | 4500 | 5020.0000000000000000 develop | 8 | 6000 | 5020.0000000000000000 develop | 10 | 5200 | 5020.0000000000000000 personnel | 5 | 3500 | 3700.0000000000000000 personnel | 2 | 3900 | 3700.0000000000000000 sales | 3 | 4800 | 4866.6666666666666667 sales | 1 | 5000 | 4866.6666666666666667 sales | 4 | 4800 | 4866.6666666666666667 (10 rows)
�ǽ�Σ��Ĥν�����ϡ��ơ��֥�empsalary����ľ�ܤ⤿�餵�졢�ơ��֥���Τ��줾��ιԤ��Ф����Ĥν��ϹԤ�¸�ߤ��ޤ��������ܤ���ϡ����ԤιԤ�Ʊ��depname���ͤ�������ƤΥơ��֥�Ԥ��ϤäƼ�������ʿ���ͤ�ɽ�路�Ƥ��ޤ����ʤ���ϼºݡ��̾��avg
����ؿ���Ʊ���Ǥ�����OVER��ˤ�ꥦ����ɥ��ؿ��Ȥ��ư���졢�Ԥ�Ŭ�ڤʽ�����Ϥ������ޤ�����
������ɥ��ؿ��ƤӽФ��Ͼ�ˡ�������ɥ��ؿ�̾�Ȱ�����ľ��ȼ��줿OVER���ޤߤޤ��� ���줬�̾�ؿ����ޤ��Ͻ���ؿ��ȹ�ʸŪ�˶��̤����Ȥ����Ǥ��� OVER��ϡ�������ɥ��ؿ��ˤ������Τ����䤤��碌�ιԤ��ɤΤ褦��ʬ��뤫��̩�˷��ꤷ�ޤ��� OVER���PARTITION BY�ꥹ�Ȥϡ��Ԥ�PARTITION BY����Ʊ���ͤ�ͭ���륰�롼�פޤ��ϥѡ��ƥ�������ʬ�䤹������Ԥ��ޤ��� ���줾��ιԤ��Ф���������ɥ��ؿ��ϸ��߹Ԥ�Ʊ���ѡ��ƥ�������ʬ�व���Ԥ��ϤäƷ�����ޤ���
OVER���ORDER BY����Ѥ��뤳�Ȥˤ�ꥦ����ɥ��ؿ��ǽ��������Ԥν�������椹�뤳�Ȥ�Ǥ��ޤ��� �ʥ�����ɥ���ORDER BY�ϹԤ����Ϥ�������˰��פ���ɬ�פ��餢��ޤ��� ����������ޤ���
SELECT depname, empno, salary, rank() OVER (PARTITION BY depname ORDER BY salary DESC) FROM empsalary;
depname | empno | salary | rank -----------+-------+--------+------ develop | 8 | 6000 | 1 develop | 10 | 5200 | 2 develop | 11 | 5200 | 2 develop | 9 | 4500 | 4 develop | 7 | 4200 | 5 personnel | 2 | 3900 | 1 personnel | 5 | 3500 | 2 sales | 1 | 5000 | 1 sales | 4 | 4800 | 2 sales | 3 | 4800 | 2 (10 rows)
�����Ǽ����줿�褦�ˡ�rank
�ؿ��ϡ����줾������Τ�ORDER BY���ͤ��Ф��븽�߹ԤΥѡ��ƥ��������ˤ������̤�ORDER BY���������줿������������ޤ���
rank
������Ū�ʥѥ�����ɬ�פȤ��ޤ�����ư���OVER��ˤ�괰���˷��ꤵ��뤿��Ǥ���
������ɥ��ؿ��ǹ�θ�����Ԥϡ��⤷¸�ߤ���ΤǤ���Ф���WHERE��GROUP BY�������HAVING��ǥե��륿������줿�䤤��碌��FROM��ˤ�ä��������줿"���ۥơ��֥�"�Ǥ����㤨�С�WHERE���˰��פ��ʤ����������줿�Ԥϥ�����ɥ��ؿ��Ǥϸ��Ĥ��뤳�Ȥ��Ǥ��ޤ��ۤʤä�OVER����Ѥ��ơ��ۤʤä���ˡ�ˤ��ǡ�����ʬ�䤹��ʣ���Υ�����ɥ��ؿ����䤤��碌���ޤ�Ǥ���ޤ������������β��ۥơ��֥��������줿�Ԥ�Ʊ��ν��ޤ������Ƥ���ư���ޤ���
ORDER BY�ϡ��Ԥν���դ������פǤʤ����䰦��ǽ�Ǥ��뤳�ȤƤ��ޤ����� PARTITION BY��Ʊ�ͤ˳䰦���뤳�Ȥ��Ǥ��ޤ��� ���ξ�硢���ƤιԤ�ޤि�ä���ĤΥѡ��ƥ������¸�ߤ��ޤ���
������ɥ��ؿ��˴�Ϣ��������¾�ν��פʳ�ǰ������ޤ���
���줾��ιԤ��Ф��ơ�����������ɥ��ե졼���ȸƤФ�롢���Υѡ��ƥ��������ιԤν��礬¸�ߤ��ޤ���
¿���Ρʤ��������٤ƤǤϤ���ޤ���˥�����ɥ��ؿ��ϡ��ѡ��ƥ���������ΤǤϤʤ���������ɥ��ե졼��ιԤΤߤ��Ф��ƺ��Ѥ��ޤ���
�ǥե���ȤǤϡ�ORDER BY�����ꤵ���ȡ��ե졼��ϡ��ѡ��ƥ������λϤᤫ�鸽�ߤιԤޤǤΤ��٤ƤιԤȡ����θ�ˤ���ORDER BY��˽��äƸ��ߤιԤ��������Ԥ��鹽������ޤ���
ORDER BY����ά���줿��硢�ǥե���ȤΥե졼��Ϥ��Υѡ��ƥ��������Τ��٤ƤιԤ�ޤߤޤ���
[1]
sum
����Ѥ�������ޤ���
SELECT salary, sum(salary) OVER () FROM empsalary;
salary | sum --------+------- 5200 | 47100 5000 | 47100 3500 | 47100 4800 | 47100 3900 | 47100 4200 | 47100 4500 | 47100 4800 | 47100 6000 | 47100 5200 | 47100 (10 rows)
��Ǥϡ�OVER�����ORDER BY��¸�ߤ��ޤ���Τǡ�������ɥ��ե졼��ϥѡ��ƥ�������Ʊ��Ǥ����ޤ��ѡ��ƥ�������PARTITION BY�⤢��ޤ���Τǥơ��֥����ΤȤʤ�ޤ�������������ȡ����¤Ϥ��줾�졢�ơ��֥����Τ��Ф��ƹԤ�졢���η�̡��ƽ��ϹԤ�Ʊ����̤����뤳�Ȥˤʤ�ޤ����������ʲ��Τ褦�ˡ�ORDER BY���ä���ȡ����˰ۤʤ��̤����ޤ���
SELECT salary, sum(salary) OVER (ORDER BY salary) FROM empsalary;
salary | sum --------+------- 3500 | 3500 3900 | 7400 4200 | 11600 4500 | 16100 4800 | 25700 4800 | 25700 5000 | 30700 5200 | 41100 5200 | 41100 6000 | 47100 (10 rows)
�����ǡ�sum�Ϻǽ�ΡʺǤ��㤤��salary���鸽�ߤιԤޤǡ����ߤΤ�ΤȽ�ʣ�������Ƥ�ޤ�ǡ�������ޤ��ʽ�ʣ����salary���Ф����̤����դ��Ƥ��������ˡ�
������ɥ��ؿ����䤤��碌��SELECT�ꥹ�Ȥ�ORDER BY��˸¤äƵ��Ĥ���ޤ���GROUP BY��HAVING�������WHERE�Τ褦�ʶ����Ǥ϶ػߤ���Ƥ��ޤ���������ͳ�ϡ�������ɥ��ؿ�������Ū�ˡ������˵��褦�ʶ礬�������줿��˼¹Ԥ���뤫��Ǥ��� �ޤ�������ɥ��ؿ����̾�ν���ؿ��θ�˼¹Ԥ���ޤ��� ���줬��̣�����ϡ�������ɥ��ؿ��ΰ����˽���ؿ��ƤӽФ���ޤ�Ƥ�ͭ���Ǥ��������εդ�����Ω���ʤ��ȸ������ȤǤ���
������ɥ��黻���Ԥ�줿�塢�Ԥ˥ե��륿������Ԥä��ꥰ�롼�ײ���Ԥ�ɬ�פ���������硢���䤤��碌����Ѥ��ޤ��� ����ޤ���
SELECT depname, empno, salary, enroll_date FROM (SELECT depname, empno, salary, enroll_date, rank() OVER (PARTITION BY depname ORDER BY salary DESC, empno) AS pos FROM empsalary ) AS ss WHERE pos < 3;
�嵭�䤤��碌��3��꾮����rank����ä������䤤��碌����ιԤΤߤ�ɽ�����ޤ���
�䤤��碌��ʣ���Υ�����ɥ��ؿ���ޤ��硢�ƥ�����ɥ��ؿ��˰ۤʤ�OVER��Ҥ��뤳�Ȥ��Ǥ��ޤ���������ʣ���δؿ���Ʊ��������ɥ�����ư�ɬ�פʾ��Ͻ�ʣ�Ȥʤꡢ�ޤ����顼�������Ǥ��������WINDOW��ǥ�����ɥ�����ư���̾�����դ��������OVER��ǻ��Ȥ��뤳�Ȥ��Ǥ��ޤ����ʲ�������ޤ���
SELECT sum(salary) OVER w, avg(salary) OVER w FROM empsalary WINDOW w AS (PARTITION BY depname ORDER BY salary DESC);
������ɥ��ؿ��ˤĤ��Ƥ��ܺ٤ϡ� 項4.2.8�� 項9.21�� 項7.2.4������� SELECT �ޥ˥奢��ڡ����ˤ���ޤ���
[1] | �ۤ�����ˡ�ǥ�����ɥ��ե졼���������뤤���Ĥ��Υ��ץ������ޤ��������Υ��塼�ȥꥢ��Ǥϰ����ޤ��ܺ٤ϡ�項4.2.8�Ȥ��Ƥ��������� |