CREATE AGGREGATE

Name

CREATE AGGREGATE -- »õ·Î¿î Áý°è ÇÔ¼ö¸¦ Á¤ÀÇÇÕ´Ï´Ù

Synopsis

CREATE AGGREGATE 
name
 ( 
input_data_type
 [ , ... ] ) (
    SFUNC = 
sfunc
,
    STYPE = 
state_data_type

    [ , FINALFUNC = 
ffunc
 ]
    [ , INITCOND = 
initial_condition
 ]
    [ , SORTOP = 
sort_operator
 ]
)

¶Ç´Â ÀÌÇÏÀÇ ±¸ ±¸¹® 

CREATE AGGREGATE 
name
 (
    BASETYPE = 
base_type
,
    SFUNC = 
sfunc
,
    STYPE = 
state_data_type

    [ , FINALFUNC = 
ffunc
 ]
    [ , INITCOND = 
initial_condition
 ]
    [ , SORTOP = 
sort_operator
 ]
)

¼³¸í

CREATE AGGREGATE´Â »õ·Î¿î Áý°è ÇÔ¼ö¸¦ Á¤ÀÇÇÕ´Ï´Ù. ¸î¸îÀÇ ±âº»ÀûÀÌ°í °øÅëÀ¸·Î »ç¿ëµÇ´Â Áý°è ÇÔ¼öµéÀº ¹èÆ÷¹°¿¡ Æ÷ÇԵǾî ÀÖ½À´Ï´Ù; ±×°ÍµéÀº Section 9.15¿¡ ¹®¼­È­µÇ¾î ÀÖ½À´Ï´Ù. ÀÌ·¯ÇÑ Áý°è ÇÔ¼ö°¡ »õ·Î¿î ŸÀÔÀ» Á¤ÀÇÇϰųª, ¾ÆÁ÷ Á¦°øµÇÁö ¾ÊÀº Áý°è ÇÔ¼ö¸¦ ÇÊ¿ä·Î ÇÏ´Â °æ¿ì, ±×¶§ ÇÊ¿äÇÑ ±â´ÉÀ» Á¦°øÇϱâ À§ÇØ CREATE AGGREGATE°¡ »ç¿ëµÉ ¼ö ÀÖ½À´Ï´Ù.

½ºÅ°¸¶ ¸íÀÌ ÁÖ¾îÁö¸é (¿¹¸¦ µé¾î, CREATE AGGREGATE myschema.myagg ...) Áý°è ÇÔ¼ö´Â ÁöÁ¤µÈ ½ºÅ°¸¶¿¡¼­ »ý¼ºµÉ ¼ö ÀÖ½À´Ï´Ù. ½ºÅ°¸¶ ¸íÀÌ ÁÖ¾îÁöÁö ¾ÊÀ¸¸é ÇöÀçÀÇ ½ºÅ°¸¶¿¡¼­ »ý¼ºµÉ ¼ö ÀÖ½À´Ï´Ù.

Áý°è ÇÔ¼ö´Â À̸§°ú ÀÔ·Â µ¥ÀÌÅÍ Å¸ÀÔ(µé)¿¡ ÀÇÇØ ½Äº°µË´Ï´Ù. °°Àº ½ºÅ°¸¶¾È¿¡ ÀÖ´Â µÎ Áý°è ÇÔ¼öµéÀÌ ¼­·Î ´Ù¸¥ ÀÔ·Â µ¥ÀÌÅÍ Å¸ÀÔÀ» ¿¬»êÇÑ´Ù¸é °°Àº À̸§À» °°½À´Ï´Ù. Áý°è ÇÔ¼öÀÇ À̸§°ú ÀÔ·Â µ¥ÀÌÅÍ Å¸ÀÔ(µé)Àº °°Àº ½ºÅ°¸¶¾È¿¡ ÀÖ´Â ¸ðµç Åë»óÀÇ ÇÔ¼öÀÇ À̸§°ú µ¥ÀÌÅÍ Å¸ÀÔ(µé)°ú ´Þ¶ó¾ß ÇÕ´Ï´Ù.

Áý°èÇÔ¼ö´Â 1°³³ª 2°³ÀÇ Åë»óÀÇ ÇÔ¼ö·ÎºÎÅÍ ¸¸µé¾îÁý´Ï´Ù: »óź¯ÀÌ ÇÔ¼ö sfunc , ±×¸®°í ¿É¼ÇÀÇ ÃÖÁ¾ °è»ê ÇÔ¼ö ffunc . À̰͵éÀº ÀÌÇÏ¿Í °°ÀÌ »ç¿ëµË´Ï´Ù.


sfunc
(³»ºÎ »óÅÂ, ´ÙÀ½ µ¥ÀÌÅÍ °ªµé) ---> ´ÙÀ½ÀÇ ³»ºÎ »óÅÂ

ffunc
( ³»ºÎ »óÅÂ) ---> Áý°è °ª

PostgreSQL´Â Áý°èÀÇ ÇöÀç ³»ºÎ »óŸ¦ À¯Áö Çϱâ À§ÇØ µ¥ÀÌÅÍ Å¸ÀÔÀÎ stype ÀÇ Àӽà º¯¼ö¸¦ »ý¼ºÇÕ´Ï´Ù. °¢°¢ÀÇ ÀÔ·Â Çà¿¡¼­, Áý¾à Àμö °ª(µé)ÀÌ °è»êµÇ°í »óź¯ÀÌ ÇÔ¼ö´Â ÇöÀç »óÅ °ª°ú »õ·Î¿î ³»ºÎ »óÅ °ªÀ» °è»êÇϱâ À§ÇÑ »õ·Î¿î ÀÎÀÚ °ª(µé)°ú ÇÔ²² È£ÃâµË´Ï´Ù. ¸ðµç ÇàµéÀÌ Ã³¸®µÈ ÈÄ¿¡, ÃÖÁ¾ ÇÔ¼ö´Â Áý°èÀÇ ¹Ýȯ°ªÀ» °è»êÇϱâ À§ÇØ Çѹø È£ÃâµË´Ï´Ù. ÃÖÁ¾ÇÔ¼ö°¡ ¾øÀ¸¸é Á¾·á »óÅ °ªÀÌ ±×´ë·Î ¹ÝȯµË´Ï´Ù.

Áý°è ÇÔ¼ö´Â Ãʱâ Á¶°ÇÀ» Á¦°øÇÒ ¼ö ÀÖ½À´Ï´Ù, Áï À̰ÍÀº, ³»ºÎ »óÅ °ª¿¡ ´ëÇÑ Ãʱ⠰ª ÀÔ´Ï´Ù. À̰ÍÀº text ŸÀÔÀÇ °ªÀ¸·Î¼­ µ¥ÀÌÅͺ£À̽º¿¡ ÁöÁ¤µÇ°í ÀúÀåµË´Ï´Ù, ±×·¯³ª »óÅÂÄ¡ µ¥ÀÌÅÍÇüÀÇ Á¤¼ö·Î¼­ À¯È¿ÇÑ ¿ÜºÎ Ç¥ÇöÀÌ ¾Æ´Ï¸é ¾ÈµË´Ï´Ù. Ãʱ⠻óÅ °ªÀÌ ÁÖ¾îÁöÁö ¾ÊÀº °æ¿ì, »óÅ °ªÀº NULL·ÎºÎÅÍ ½ÃÀ۵˴ϴÙ.

»óź¯ÀÌ ÇÔ¼ö°¡ "strict"ÀÌ¶ó ¼±¾ðµÇ´Â °æ¿ì, nullÀÌ ÀÔ·Â °ªÀ¸·Î È£ÃâµÉ ¼ö ¾ø½À´Ï´Ù. ±×·¯ÇÑ º¯ÀÌ ÇÔ¼ö¿¡¼­, Áý°è´Â ´ÙÀ½°ú °°ÀÌ ½ÇÇàµË´Ï´Ù. null ÀԷ°ªµéÀ» °¡Áö´Â ÇàÀº ¹«½ÃµË´Ï´Ù. (ÇÔ¼ö´Â È£ÃâµÇÁö ¾Ê°í, ÀÌÀü »óÅ °ªÀÌ À¯ÁöµË´Ï´Ù.) Ãʱ⠻óÅ °ªÀÌ nullÀ̸é, null°ªÀÌ ¾Æ´Ñ ÀÔ·Â °ªµéÀ» °¡Áø ù¹øÂ° Çà¿¡¼­, ù¹øÂ° ÀÎÀÚ °ªÀÌ »óÅ °ªÀ» ´ëüÇÕ´Ï´Ù, ±×¸®°í null°ªÀÌ ¾Æ´Ñ ÀÔ·Â °ªµéÀ» °¡Áø ´ÙÀ½ Çà¿¡¼­ º¯ÀÌ ÇÔ¼ö´Â È£ÃâµË´Ï´Ù. À̰ÍÀº max°ú °°Àº µ¿ÀÛÀ» ½ÇÇàÇϱ⿡ Æí¸® ÇÕ´Ï´Ù. ÀÌ µ¿ÀÛÀº state_data_type °¡ óÀ½ÀÇ input_data_type .¿Í °°À» ¶§¿¡¸¸ ¿ÀÁ÷ À̿밡´É ÇÕ´Ï´Ù. À̵é ŸÀÔÀÌ ´Ù¸¦ ¶§, nullÀÌ ¾Æ´Ñ Ãʱâ Á¶°Ç ¶Ç´Â ¾ö°ÝÇÏÁö ¾ÊÀº º¯ÀÌ ÇÔ¼ö¸¦ ÃæÁ·½ÃÄÑ¾ß ÇÕ´Ï´Ù.

»óź¯ÀÌ ÇÔ¼ö°¡ ¾ö°ÝÇÏÁö ¾ÊÀ¸¸é, °¢°¢ÀÇ ÀÔ·ÂÇà¿¡ ´ëÇØ¼­ ±× ÇÔ¼ö°¡ ¹«Á¶°Ç ºÒ·Á °¡¹Ç·Î, null ÀԷ°ú null º¯ÀÌ °ªÀ» ½º½º·Î ó¸®ÇÏÁö ¾ÊÀ¸¸é ¾ÈµË´Ï´Ù. À̰ÍÀº ÇÔ¼ö ÀÛ¼ºÀÚ°¡ Áý°èÇÔ¼öÀÇ null °ªµéÀ» ¿ÏÀüÈ÷ ÅëÁ¦ÇÒ ¼ö ÀÖÀ½À» Çã¶ôÇÕ´Ï´Ù.

ÃÖÁ¾ ÇÔ¼ö°¡ "¾ö°Ý(strict)"À̶ó°í ¼±¾ðµÇ°í ÀÖÀ¸¸é, Á¾·á °ªÀÌ nullÀÏ ¶§¿¡´Â, ÃÖÁ¾ ÇÔ¼ö°¡ È£ÃâµÇÁö ¾ÊÀ» °Í ÀÔ´Ï´Ù; ´ë½Å¿¡ null °ªÀÌ ÀÚµ¿ÀûÀ¸·Î ¹ÝȯµÉ °ÍÀÔ´Ï´Ù. (¹°·Ð À̰ÍÀº, ¾ö°ÝÇÑ ÇÔ¼öÀÇ ÀϹÝÀúÀÎ µ¿ÀÛ¿¡ Áö³ªÁö ¾Ê½À´Ï´Ù.) ¾î¶² °æ¿ì¶óµµ, ÃÖÁ¾ ÇÔ¼ö´Â null °ªÀ» ¹ÝȯÇÏ´Â ¼±ÅñÇÀ» °¡Áö°í ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î, avg¿¡ ´ëÇÑ ÃÖÁ¾ ÇÔ¼ö´Â ÀÔ·ÂÀÌ 0ÇàÀ̶ó°í ¾Ë¸é, nullÀ» ¹ÝȯÇÕ´Ï´Ù.

MIN or MAX¿Í °°Àº ÇൿÀ» ÇÏ´Â Áý°è¿¡¼­´Â, ¶§¶§·Î ¸ðµç ÀÔ·Â ÇàÀ» ÀÚ¼¼È÷ Á¶»ç ÇÏ´Â ´ë½Å¿¡, ÀÎÅØ½º¸¦ Á¶»çÇÔ¿¡ ÀÇÇØ¼­ ÃÖÀûÈ­ µÉ ¼ö ÀÖ½À´Ï´Ù. ÀÌó·³ Áý°èÇÔ¼ö°¡ ÃÖÀûÈ­µÇ´Â °æ¿ì, Á¤·Ä ¿¬»êÀÚ¸¦ ¸í½ÃÇÔ¿¡ ÀÇÇØ ³ªÅ¸³À´Ï´Ù. ±âº»ÀûÀÎ ¿ä±¸»çÇ×Àº Áý°èÇÔ¼ö°¡ Á¤·Ä ¿¬»êÀÚ¿¡ ÀÇÇØ »ý¼ºµÇ´Â Á¤·Ä ¼ø¼­¿¡¼­ ù¹øÂ° ¿ä¼Ò¸¦ »êÃâÇØ¾ß ÇÏ´Â °Í ÀÔ´Ï´Ù. Áï,

SELECT agg(col) FROM tab;

~¿¡ »óµî µÇ¾î¾ß ÇÕ´Ï´Ù.

SELECT col FROM tab ORDER BY col USING sortop LIMIT 1;

´õ¿íÀÌ Áý°è°¡ null ÀÔ·ÂÀ» ¹«½ÃÇÏ´Â °Í, ±×¸®°í null ÀÌ¿ÜÀÇ ÀÔ·ÂÀÌ ÀüÇô ¾ø¾ú´ø ¶§¿¡°Ô¸¸, null °á°ú °ªÀ» Àü´Þ ÇÕ´Ï´Ù. Åë»ó, µ¥ÀÌÅÍ Å¸ÀÔÀÇ < ¿¬»êÀÚ´Â MIN¿¡ ´ëÇÑ ÀûÀýÇÑ Á¤·Ä ¿¬»êÀÚ À̰í, > ¿¬»êÀÚ´Â MAX¿¡ ´ëÇÑ ÀûÀýÇÑ Á¤·Ä ¿¬»êÀÚ ÀÔ´Ï´Ù. ÁöÁ¤ÇÑ ¿¬»êÀÚ°¡ B-tree À妽º ¿¬»êÀÚ Å¬·¡½ºÀÇ °Í"º¸´Ù ÀÛÀº"½ºÆ®·¡ÅÍÁöÀΰ¡ "º¸´Ù Å«"½ºÆ®·¡ÅÍÁöÀÇ ¸â¹ö°¡ ¾Æ´Ñ ÇÑ, ÃÖÀûÈ­°¡ ½ÇÁ¦·Î´Â È¿°ú°¡ ¾ø´Â °Í¿¡ ÁÖÀÇÇØ ÁÖ¼¼¿ä.

ÆÄ¶ó¹ÌÅÍ

name

»ý¼ºÇÏ´Â Áý°è ÇÔ¼öÀÇ À̸§(¼±ÅÃÀûÀ¸·Î ÇÑÁ¤µÈ ½ºÅ°¸¶) ÀÔ´Ï´Ù.

input_data_type

Áý°è ÇÔ¼ö°¡ ¿¬»êÇÏ´Â ÀÔ·Â µ¥ÀÌÅÍ Å¸ÀÔ ÀÔ´Ï´Ù. Àμö°¡ Á¸ÀçÇÏÁö ¾Ê´Â Áý°è ÇÔ¼ö¸¦ ÀÛ¼ºÇÏ·Á¸é , ÀÔ·Â µ¥ÀÌÅÍ Å¸ÀÔÀÇ Àå¼Ò¿¡*¶ó°í ±âÀçÇØ ÁÖ¼¼¿ä. (±×·¯ÇÑ Áý°èÀÇ ¿¹´Â count(*) ÀÔ´Ï´Ù.)

base_type

CREATE AGGREGATEÀÇ ±¸ ±¸¹®¿¡¼­´Â, ÀÔ·Â µ¥ÀÌÅÍ Å¸ÀÔÀÌ Áý°è ÇÔ¼ö À̸§ ¿·¿¡ ±âÀçµÇ´Â °Íº¸´Ù basetype ÆÄ¶ó¹ÌÅÍ¿¡ ÀÇÇØ ÁöÁ¤ µË´Ï´Ù. ÀÌ ±¸¹®Àº ¿ÀÁ÷ ÇϳªÀÇ ÀÔ·Â ÆÄ¶ó¹ÌÅ͸¦ Çã¿ëÇÔÀ» ÁÖÀÇ Çϼ¼¿ä. Àμö°¡ ¾ø´Â Áý°è ÇÔ¼ö¸¦ Á¤ÀÇ Çϱâ À§ÇØ, basetype¸¦ "ANY" (*°¡ ¾Æ´Õ´Ï´Ù)¿Í ÁöÁ¤ÇØ ÁÖ¼¼¿ä.

sfunc

°¢°¢ÀÇ ÀÔ·Â Çà¿¡ ´ëÇØ È£Ã⠵Ǵ »óź¯ÀÌ ÇÔ¼öÀÇ À̸§ ÀÔ´Ï´Ù. N Àμö¸¦ °¡Áö´Â Áý°è ÇÔ¼ö¿¡¼­´Â, sfunc °¡ state_data_type ŸÀÔÀÇ Ã¹¹øÂ° °Í°ú Áý°èÀÇ ¼±¾ðµÈ ÀÔ·Â µ¥ÀÌÅÍ Å¸ÀÔ°ú ¸ÅĪÇÏ´Â ³ª¸ÓÁö·Î ÀÌ·ç¾îÁø N +1ÀÇ Àμö¸¦ °¡Á®¾ß ÇÕ´Ï´Ù. ÀÌ ÇÔ¼ö´Â ÇöÀç »óÅ °ª°ú ÇöÀçÀÇ ÀÔ·Â µ¥ÀÌÅÍ °ªÀ» ÃëÇϰí, ´ÙÀ½ »óÅ °ªÀ» ¹ÝȯÇÕ´Ï´Ù.

state_data_type

Áý°è »óÅ °ª¿¡ ´ëÇÑ µ¥ÀÌÅÍ Å¸ÀÔÀÔ´Ï´Ù.

ffunc

¸ðµç ÀÔ·Â Çà¿¡ ´ëÇÑ Ã³¸®°¡ ³¡³­ ÈÄ, Áý°èÀÇ °á°ú¸¦ °è»êÇϱâ À§ÇØ È£ÃâµÇ´Â ÃÖÁ¾ ÇÔ¼öÀÇ À̸§ ÀÔ´Ï´Ù. ÀÌ ÇÔ¼ö´Â state_data_type ŸÀÔÀÇ Àμö 1°³¸¦ °¡Á®¾ß ÇÕ´Ï´Ù. Áý°èÀÇ ¹Ýȯ µ¥ÀÌÅÍ Å¸ÀÔÀº ÀÌ ÇÔ¼öÀÇ ¹Ýȯ ŸÀÔÀ¸·Î Á¤ÀÇ µË´Ï´Ù. ffunc °¡ ÁöÁ¤µÇÁö ¾ÊÀ¸¸é, Á¾·á »óÅ °ªÀº Áý°èÀÇ °á°ú·Î »ç¿ëµË´Ï´Ù. ¹Ýȯ ŸÀÔÀº state_data_type °¡ µË´Ï´Ù.

initial_condition

»óÅ °ªÀÇ Ãʱ⠼³Á¤ÀÔ´Ï´Ù. À̰ÍÀº µ¥ÀÌÅÍ Å¸ÀÔ state_data_type ¿¡ ´ëÇØ ¼ö¿ëµÈ Çü½Ä¾È¿¡ ÀÖ´Â ¹®ÀÚ¿­ »ó¼ö¿©¾ß ÇÕ´Ï´Ù. À̰ÍÀÌ ÁöÁ¤µÇÁö ¾ÊÀ¸¸é, »óŰªÀº nullºÎÅÍ ½ÃÀÛ µË´Ï´Ù.

sort_operator

MIN¶Ç´ÂMAX¿Í °°Àº Áý°è¿Í °ü·ÃµÈ Á¤·Ä ¿¬»êÀÚ ÀÔ´Ï´Ù. À̰ÍÀº ´Ü¼øÇÑ ¿¬»êÀÚ À̸§ÀÔ´Ï´Ù. (Àû°ÝÀÇ ½ºÅ°¸¶·Î ¼ö½Ä °¡´É) ÀÌ ¿¬»êÀÚ´Â Áý°è(ÇϳªÀÇ Àμö¸¸ °¡Áö´Â Áý°è)¿Í °°Àº ÀÔ·Â µ¥ÀÌÅÍ Å¸ÀÔÀ» °¡Áö´Â °ÍÀ» ÀüÁ¦·Î ÇÕ´Ï´Ù.

CREATE AGGREGATEÀÇ ÆÄ¶ó¹ÌÅÍ´Â ´ÜÁö À§¿¡ ¼³¸íµÈ ¼ø¼­ »Ó¸¸ ¾Æ´Ï¶ó, ¾î¶² ¼ø¼­·Îµµ ±âÀçµÉ ¼ö ÀÖ½À´Ï´Ù.

¿¹

Section 33.10(À»)¸¦ ÂüÁ¶ÇØ ÁÖ¼¼¿ä.

ȣȯ¼º

CREATE AGGREGATE´Â PostgreSQLÀÇ ¾ð¾î È®ÀåÀÔ´Ï´Ù. SQL Ç¥ÁØÀº »ç¿ëÀÚ Á¤ÀÇ Áý°è ÇÔ¼ö±â´ÉÀ» Á¦°øÇÏÁö ¾Ê½À´Ï´Ù.

°ü·Ã Ç׸ñ

ALTER AGGREGATE , DROP AGGREGATE