PostgreSQL 8.0.0 �����ĵ���PostgreSQL �й� ������ | ||||
---|---|---|---|---|
Prev | Fast Backward | Chapter 31. ��չ SQL | Fast Forward | Next |
�� PostgreSQL��ľۼ�����״ֵ̬ �� ״̬ת���������ġ� Ҳ����˵��һ���ۼ����Զ���ΪһЩ״̬�� ��һ���������Ŀ������ʱ����Щ״̬���ġ� Ҫ����һ���µľۼ����������Ǿ�Ҫѡ��һ����ʾ״ֵ̬���������ͣ� һ��״̬��ʼֵ��һ��״̬ת�������� ��״̬ת������ֻ��һ����ͨ������Ҳ�������ھۼ��Ļ���֮�⡣ ����������һ���մ������� ���ڶԸ��������ľۼ��������Ҫ���������е�״ֵ̬��������ݲ�ͬ�������
��ˣ����˱��ۼ��û������IJ����ͽ�����������⣬����һ���ڲ�״ֵ̬�������ͣ��������Ϳ��ܺͲ����������Ͷ���һ����
������Ƕ�����һ����ʹ���մ������ľۼ��� �����ǵľۼ����Ƕ�ÿ����¼���ֶ�ֵ���к������㡣 sum����ͣ�������ۼ������ӡ� sum���㿪ʼ��ÿ�ζ��������ܺ��ӵ�ǰ��¼ֵ�����磬�������Ҫ�� Sum �ۼ����ڸ���������ֻ��Ҫ���������͵ļӷ����������ˡ� �þۼ������������壺
CREATE AGGREGATE complex_sum ( sfunc = complex_add, basetype = complex, stype = complex, initcond = '(0,0)' ); SELECT complex_sum(a) FROM test_complex; complex_sum ------------- (34,53.9)
��ʵ���ϣ����ǻ������ۼ�����Ϊ sum��Ȼ���� PostgreSQL �����ֶ�һ������Ϊ complex ����Ӧ��ʹ������ sum����
��������ڷǿ�����ֵ�������sum���彫������ֵ����ʼ״̬�������� ������������������»�ϣ������NULL — SQL��Ҫ�� sum ����Ϊ�������ġ� ����ֻ��Ҫ����initcond�ξͿ���ʵ����һ�㣬 ������ʼ״̬������ NULL�� ͨ����Ҳ��ζ��sfunc��Ҫ��� NULL ״̬�������룬 �������� sum ��һЩ��Max��Min�����ļۼ���˵�� �ѵ�һ���ǿ�������뵽״ֵ̬���棬 Ȼ��ӵڶ����ǿ�����״ֵ̬��ʼʹ��ת���������㹻�ˡ� �����ʼ������NULL����ת���������Ϊ"strict"�� ��Ҳ����˵�����ܶ�NULL������á��� PostgreSQL �ͻ��Զ�������Щ���ݡ�
����һ��"strict"ת��������ȱʡ�����ǣ�������һ��NULL�����ʱ�� ǰ��һ��״̬ת�������ᱻ�������������Ķ��� �������ͺ�����NULL�������ϣ���Կ�ֵ��������������ֻ��Ҫ ������ת����������Ϊ�ϸ��Ȼ���д�����ʱ�� ����NULL������Ӧ�����ɡ�
avg��ƽ�����Ǹ�����һ��ľۼ������ӡ�����Ҫ��������ʱ״̬�� ������ܺ��Լ����������ļ��������ս����ͨ������Щ������õ��ġ� ƽ���ĵ���ʵ��������Ԫ��������״ֵ̬�����磬�ڽ��� avg(float8)ʵ���������ģ�
CREATE AGGREGATE avg ( sfunc = float8_accum, basetype = float8, stype = float8[], finalfunc = float8_avg, initcond = '{0,0}' );
�ۼ���������ʹ�ö�̬ת�����������մ������� ������ͬһ��������������ʵ�ֶ���ۼ��� ���� Section 31.2.5 ��ȡ��̬�����Ľ��͡� �ٽ�һ�����ۼ�������������ö�̬�Ļ������ͺ�״̬������������ ����������һ���ۼ��������ڶ��������������͡� ������һ����̬�ۼ������ӣ�
CREATE AGGREGATE array_accum ( sfunc = array_append, basetype = anyelement, stype = anyarray, initcond = '{}' );
�������ۼ����õ�ʵ��״̬�����Ǻ�Ԫ������������ͬ���������͡�
������ʹ��������ͬʵ������������ΪԪ�ص������
SELECT attrelid::regclass, array_accum(attname) FROM pg_attribute WHERE attnum > 0 AND attrelid = 'pg_user'::regclass GROUP BY attrelid; attrelid | array_accum ----------+----------------------------------------------------------------------------- pg_user | {usename,usesysid,usecreatedb,usesuper,usecatupd,passwd,valuntil,useconfig} (1 row) SELECT attrelid::regclass, array_accum(atttypid) FROM pg_attribute WHERE attnum > 0 AND attrelid = 'pg_user'::regclass GROUP BY attrelid; attrelid | array_accum ----------+------------------------------ pg_user | {19,23,16,16,16,25,702,1009} (1 row)
����ϸ����Ϣ��ο� CREATE AGGREGATE ���