| PostgreSQL 8.3.3¹®¼ | ||||
|---|---|---|---|---|
| Prev | Fast Backward | Fast Forward | Next | |
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 À妽º ¿¬»êÀÚ Å¬·¡½ºÀÇ °Í"º¸´Ù ÀÛÀº"½ºÆ®·¡ÅÍÁöÀΰ¡
"º¸´Ù Å«"½ºÆ®·¡ÅÍÁöÀÇ ¸â¹ö°¡ ¾Æ´Ñ ÇÑ, ÃÖÀûȰ¡ ½ÇÁ¦·Î´Â È¿°ú°¡ ¾ø´Â °Í¿¡ ÁÖÀÇÇØ ÁÖ¼¼¿ä.
»ý¼ºÇÏ´Â Áý°è ÇÔ¼öÀÇ À̸§(¼±ÅÃÀûÀ¸·Î ÇÑÁ¤µÈ ½ºÅ°¸¶) ÀÔ´Ï´Ù.
Áý°è ÇÔ¼ö°¡ ¿¬»êÇÏ´Â ÀÔ·Â µ¥ÀÌÅÍ Å¸ÀÔ ÀÔ´Ï´Ù.
Àμö°¡ Á¸ÀçÇÏÁö ¾Ê´Â Áý°è ÇÔ¼ö¸¦ ÀÛ¼ºÇÏ·Á¸é , ÀÔ·Â µ¥ÀÌÅÍ Å¸ÀÔÀÇ Àå¼Ò¿¡*¶ó°í ±âÀçÇØ ÁÖ¼¼¿ä.
(±×·¯ÇÑ Áý°èÀÇ ¿¹´Â count(*) ÀÔ´Ï´Ù.)
CREATE AGGREGATEÀÇ ±¸ ±¸¹®¿¡¼´Â, ÀÔ·Â µ¥ÀÌÅÍ Å¸ÀÔÀÌ Áý°è ÇÔ¼ö À̸§ ¿·¿¡ ±âÀçµÇ´Â °Íº¸´Ù basetype ÆÄ¶ó¹ÌÅÍ¿¡ ÀÇÇØ ÁöÁ¤ µË´Ï´Ù. ÀÌ ±¸¹®Àº ¿ÀÁ÷ ÇϳªÀÇ ÀÔ·Â ÆÄ¶ó¹ÌÅ͸¦ Çã¿ëÇÔÀ» ÁÖÀÇ Çϼ¼¿ä. Àμö°¡ ¾ø´Â Áý°è ÇÔ¼ö¸¦ Á¤ÀÇ Çϱâ À§ÇØ, basetype¸¦ "ANY" (*°¡ ¾Æ´Õ´Ï´Ù)¿Í ÁöÁ¤ÇØ ÁÖ¼¼¿ä.
°¢°¢ÀÇ ÀÔ·Â Çà¿¡ ´ëÇØ È£Ã⠵Ǵ »óź¯ÀÌ ÇÔ¼öÀÇ À̸§ ÀÔ´Ï´Ù. N Àμö¸¦ °¡Áö´Â Áý°è ÇÔ¼ö¿¡¼´Â, sfunc °¡ state_data_type ŸÀÔÀÇ Ã¹¹øÂ° °Í°ú Áý°èÀÇ ¼±¾ðµÈ ÀÔ·Â µ¥ÀÌÅÍ Å¸ÀÔ°ú ¸ÅĪÇÏ´Â ³ª¸ÓÁö·Î ÀÌ·ç¾îÁø N +1ÀÇ Àμö¸¦ °¡Á®¾ß ÇÕ´Ï´Ù. ÀÌ ÇÔ¼ö´Â ÇöÀç »óÅ °ª°ú ÇöÀçÀÇ ÀÔ·Â µ¥ÀÌÅÍ °ªÀ» ÃëÇϰí, ´ÙÀ½ »óÅ °ªÀ» ¹ÝȯÇÕ´Ï´Ù.
Áý°è »óÅ °ª¿¡ ´ëÇÑ µ¥ÀÌÅÍ Å¸ÀÔÀÔ´Ï´Ù.
¸ðµç ÀÔ·Â Çà¿¡ ´ëÇÑ Ã³¸®°¡ ³¡³ ÈÄ, Áý°èÀÇ °á°ú¸¦ °è»êÇϱâ À§ÇØ È£ÃâµÇ´Â ÃÖÁ¾ ÇÔ¼öÀÇ À̸§ ÀÔ´Ï´Ù. ÀÌ ÇÔ¼ö´Â state_data_type ŸÀÔÀÇ Àμö 1°³¸¦ °¡Á®¾ß ÇÕ´Ï´Ù. Áý°èÀÇ ¹Ýȯ µ¥ÀÌÅÍ Å¸ÀÔÀº ÀÌ ÇÔ¼öÀÇ ¹Ýȯ ŸÀÔÀ¸·Î Á¤ÀÇ µË´Ï´Ù. ffunc °¡ ÁöÁ¤µÇÁö ¾ÊÀ¸¸é, Á¾·á »óÅ °ªÀº Áý°èÀÇ °á°ú·Î »ç¿ëµË´Ï´Ù. ¹Ýȯ ŸÀÔÀº state_data_type °¡ µË´Ï´Ù.
»óÅ °ªÀÇ Ãʱ⠼³Á¤ÀÔ´Ï´Ù. À̰ÍÀº µ¥ÀÌÅÍ Å¸ÀÔ state_data_type ¿¡ ´ëÇØ ¼ö¿ëµÈ Çü½Ä¾È¿¡ ÀÖ´Â ¹®ÀÚ¿ »ó¼ö¿©¾ß ÇÕ´Ï´Ù. À̰ÍÀÌ ÁöÁ¤µÇÁö ¾ÊÀ¸¸é, »óŰªÀº nullºÎÅÍ ½ÃÀÛ µË´Ï´Ù.
MIN¶Ç´ÂMAX¿Í °°Àº Áý°è¿Í °ü·ÃµÈ Á¤·Ä ¿¬»êÀÚ ÀÔ´Ï´Ù.
À̰ÍÀº ´Ü¼øÇÑ ¿¬»êÀÚ À̸§ÀÔ´Ï´Ù. (Àû°ÝÀÇ ½ºÅ°¸¶·Î ¼ö½Ä °¡´É)
ÀÌ ¿¬»êÀÚ´Â Áý°è(ÇϳªÀÇ Àμö¸¸ °¡Áö´Â Áý°è)¿Í °°Àº ÀÔ·Â µ¥ÀÌÅÍ Å¸ÀÔÀ» °¡Áö´Â °ÍÀ» ÀüÁ¦·Î ÇÕ´Ï´Ù.
CREATE AGGREGATEÀÇ ÆÄ¶ó¹ÌÅÍ´Â ´ÜÁö À§¿¡ ¼³¸íµÈ ¼ø¼ »Ó¸¸ ¾Æ´Ï¶ó, ¾î¶² ¼ø¼·Îµµ ±âÀçµÉ ¼ö ÀÖ½À´Ï´Ù.