9.21. ÐгÑегаÑнÑе ÑÑнкÑии #
ÐгÑегаÑнÑе ÑÑнкÑии полÑÑаÑÑ ÐµÐ´Ð¸Ð½ÑÑвеннÑй ÑезÑлÑÑÐ°Ñ Ð¸Ð· набоÑа Ð²Ñ Ð¾Ð´Ð½ÑÑ Ð·Ð½Ð°Ñений. ÐÑÑÑоеннÑе агÑегаÑнÑе ÑÑнкÑии обÑего назнаÑÐµÐ½Ð¸Ñ Ð¿ÐµÑеÑиÑÐ»ÐµÐ½Ñ Ð² ТаблиÑе 9.62, а ÑÑаÑиÑÑиÑеÑкие агÑегаÑнÑе ÑÑнкÑии â в ТаблиÑе 9.63. ÐÑÑÑоеннÑе внÑÑÑигÑÑпповÑе ÑоÑÑиÑÑÑÑие агÑегаÑнÑе ÑÑнкÑии пеÑеÑиÑÐ»ÐµÐ½Ñ Ð² ТаблиÑе 9.64, вÑÑÑоеннÑе внÑÑÑигÑÑпповÑе гипоÑезиÑÑÑÑие â в ТаблиÑе 9.65. ÐÑÑппиÑÑÑÑие опеÑаÑоÑÑ, ÑеÑно ÑвÑзаннÑе Ñ Ð°Ð³ÑегаÑнÑми ÑÑнкÑиÑми, пеÑеÑиÑÐ»ÐµÐ½Ñ Ð² ТаблиÑе 9.66. ÐÑобенноÑÑи ÑинÑакÑиÑа агÑегаÑнÑÑ ÑÑнкÑией ÑазÑÑÑнÑÑÑÑÑ Ð² ÐодÑазделе 4.2.7. Ðа дополниÑелÑной вводной инÑоÑмаÑией обÑаÑиÑеÑÑ Ðº РазделÑ 2.7.
ÐгÑегаÑнÑе ÑÑнкÑии, поддеÑживаÑÑие ÑаÑÑиÑнÑй Ñежим, ÑвлÑÑÑÑÑ ÐºÐ°Ð½Ð´Ð¸Ð´Ð°Ñами на ÑÑаÑÑие в ÑазлиÑнÑÑ Ð¾Ð¿ÑимизаÑиÑÑ , напÑимеÑ, в паÑаллелÑном агÑегиÑовании.
ХоÑÑ Ð²Ñе агÑегаÑнÑе ÑÑнкÑии ниже пÑинимаÑÑ Ð½ÐµÐ¾Ð±ÑзаÑелÑное пÑедложение ORDER BY (как опиÑано в ÐодÑазделе 4.2.7), ÑÑо пÑедложение бÑло добавлено ÑолÑко Ð´Ð»Ñ ÑеÑ
ÑÑнкÑий, вÑвод коÑоÑÑÑ
завиÑÐ¸Ñ Ð¾Ñ ÑпоÑÑдоÑениÑ.
ТаблиÑа 9.62. ÐгÑегаÑнÑе ÑÑнкÑии обÑего назнаÑениÑ
ФÑнкÑÐ¸Ñ ÐпиÑание | ЧаÑÑиÑнÑй Ñежим |
|---|---|
ÐозвÑаÑÐ°ÐµÑ Ð¿ÑоизволÑное знаÑение из Ð²Ñ Ð¾Ð´Ð½ÑÑ Ð·Ð½Ð°Ñений, оÑлиÑнÑÑ Ð¾Ñ NULL. | Ðа |
СобиÑÐ°ÐµÑ Ð²Ñе Ð²Ñ Ð¾Ð´Ð½Ñе знаÑениÑ, вклÑÑÐ°Ñ NULL, в маÑÑив. | Ðа |
СобиÑÐ°ÐµÑ Ð²Ñе Ð²Ñ Ð¾Ð´Ð½Ñе маÑÑÐ¸Ð²Ñ Ð² маÑÑив Ñ ÑазмеÑноÑÑÑÑ Ð±Ð¾Ð»ÑÑе на один. (ÐÑ Ð¾Ð´Ð½Ñе маÑÑÐ¸Ð²Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¸Ð¼ÐµÑÑ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²ÑÑ ÑазмеÑноÑÑÑ Ð¸ не могÑÑ Ð±ÑÑÑ Ð¿ÑÑÑÑми или ÑÐ°Ð²Ð½Ñ NULL). | Ðа |
ÐÑÑиÑлÑÐµÑ Ð°ÑиÑмеÑиÑеÑкое ÑÑеднее Ð´Ð»Ñ Ð²ÑÐµÑ Ð²Ñ Ð¾Ð´Ð½ÑÑ Ð·Ð½Ð°Ñений, оÑлиÑнÑÑ Ð¾Ñ NULL. | Ðа |
ÐÑÑиÑлÑÐµÑ Ð¿Ð¾Ð±Ð¸Ñовое Ð Ð´Ð»Ñ Ð²ÑÐµÑ Ð²Ñ Ð¾Ð´Ð½ÑÑ Ð·Ð½Ð°Ñений, оÑлиÑнÑÑ Ð¾Ñ NULL. | Ðа |
ÐÑÑиÑлÑÐµÑ Ð¿Ð¾Ð±Ð¸Ñовое ÐÐÐ Ð´Ð»Ñ Ð²ÑÐµÑ Ð²Ñ Ð¾Ð´Ð½ÑÑ Ð·Ð½Ð°Ñений, оÑлиÑнÑÑ Ð¾Ñ NULL. | Ðа |
ÐÑÑиÑлÑÐµÑ Ð¿Ð¾Ð±Ð¸Ñовое иÑклÑÑаÑÑее ÐÐÐ Ð´Ð»Ñ Ð²ÑÐµÑ Ð²Ñ Ð¾Ð´Ð½ÑÑ Ð·Ð½Ð°Ñений, оÑлиÑнÑÑ Ð¾Ñ NULL. ÐÐ¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð° Ð´Ð»Ñ Ð²ÑÑиÑÐ»ÐµÐ½Ð¸Ñ ÐºÐ¾Ð½ÑÑолÑной ÑÑÐ¼Ð¼Ñ Ð½ÐµÑпоÑÑдоÑенного набоÑа знаÑений. | Ðа |
ÐозвÑаÑÐ°ÐµÑ true, еÑли вÑе Ð²Ñ Ð¾Ð´Ð½Ñе знаÑениÑ, оÑлиÑнÑе Ð¾Ñ NULL, ÑÐ°Ð²Ð½Ñ true, и false в пÑоÑивном ÑлÑÑае. | Ðа |
ÐозвÑаÑÐ°ÐµÑ true, еÑли Ñ Ð¾ÑÑ Ð±Ñ Ð¾Ð´Ð½Ð¾ Ð²Ñ Ð¾Ð´Ð½Ð¾Ðµ знаÑение, оÑлиÑное Ð¾Ñ NULL, Ñавно true, и false в пÑоÑивном ÑлÑÑае. | Ðа |
ÐÑдаÑÑ ÐºÐ¾Ð»Ð¸ÑеÑÑво Ð²Ñ Ð¾Ð´Ð½ÑÑ ÑÑÑок. | Ðа |
ÐÑдаÑÑ ÐºÐ¾Ð»Ð¸ÑеÑÑво Ð²Ñ Ð¾Ð´Ð½ÑÑ ÑÑÑок, в коÑоÑÑÑ Ð²Ñ Ð¾Ð´Ð½Ð¾Ðµ знаÑение оÑлиÑно Ð¾Ñ NULL. | Ðа |
ÐÑо ÑооÑвеÑÑÑвÑÑÑий ÑÑандаÑÑÑ SQL аналог | Ðа |
СобиÑÐ°ÐµÑ Ð²Ñе вÑ
однÑе знаÑениÑ, вклÑÑÐ°Ñ NULL, в JSON-маÑÑив. ÐнаÑÐµÐ½Ð¸Ñ Ð¿ÑеобÑазÑÑÑÑÑ Ð² JSON меÑодом | ÐÐµÑ |
СобиÑÐ°ÐµÑ Ð²Ñе вÑ
однÑе знаÑениÑ, иÑклÑÑÐ°Ñ NULL, в JSON-маÑÑив. ÐнаÑÐµÐ½Ð¸Ñ Ð¿ÑеобÑазÑÑÑÑÑ Ð² JSON меÑодом | ÐÐµÑ |
ÐедÑÑ ÑÐµÐ±Ñ Ñак же, как ÑÑнкÑиÑ
| ÐÐµÑ |
ÐедÑÑ ÑÐµÐ±Ñ Ñак же, как опиÑÐ°Ð½Ð½Ð°Ñ Ð²ÑÑе ÑÑнкÑиÑ
| ÐÐµÑ |
СобиÑÐ°ÐµÑ Ð²Ñе паÑÑ ÐºÐ»ÑÑ/знаÑение в JSON-обÑекÑ. ÐÑгÑменÑÑ-клÑÑи пÑиводÑÑÑÑ Ðº ÑекÑÑÐ¾Ð²Ð¾Ð¼Ñ ÑипÑ, а знаÑÐµÐ½Ð¸Ñ Ð¿ÑеобÑазÑÑÑÑÑ Ð¼ÐµÑодом | ÐÐµÑ |
СобиÑÐ°ÐµÑ Ð²Ñе паÑÑ ÐºÐ»ÑÑ/знаÑение в JSON-обÑекÑ. ÐÑгÑменÑÑ-клÑÑи пÑиводÑÑÑÑ Ðº ÑекÑÑÐ¾Ð²Ð¾Ð¼Ñ ÑипÑ, а знаÑÐµÐ½Ð¸Ñ Ð¿ÑеобÑазÑÑÑÑÑ Ð¼ÐµÑодом | ÐÐµÑ |
СобиÑÐ°ÐµÑ Ð²Ñе паÑÑ ÐºÐ»ÑÑ/знаÑение в JSON-обÑекÑ. ÐÑгÑменÑÑ-клÑÑи пÑиводÑÑÑÑ Ðº ÑекÑÑÐ¾Ð²Ð¾Ð¼Ñ ÑипÑ, а знаÑÐµÐ½Ð¸Ñ Ð¿ÑеобÑазÑÑÑÑÑ Ð¼ÐµÑодом | ÐÐµÑ |
СобиÑÐ°ÐµÑ Ð²Ñе паÑÑ ÐºÐ»ÑÑ/знаÑение в JSON-обÑекÑ. ÐÑгÑменÑÑ-клÑÑи пÑиводÑÑÑÑ Ðº ÑекÑÑÐ¾Ð²Ð¾Ð¼Ñ ÑипÑ, а знаÑÐµÐ½Ð¸Ñ Ð¿ÑеобÑазÑÑÑÑÑ Ð¼ÐµÑодом | ÐÐµÑ |
ÐÑÑиÑлÑÐµÑ Ð¼Ð°ÐºÑималÑное из вÑеÑ
знаÑений, оÑлиÑнÑÑ
Ð¾Ñ NULL. ÐмееÑÑÑ Ð´Ð»Ñ Ð²ÑеÑ
ÑиÑловÑÑ
и ÑÑÑоковÑÑ
Ñипов, Ñипов-пеÑеÑиÑлений и даÑÑ/вÑемени, Ñипов | Ðа |
ÐÑÑиÑлÑÐµÑ Ð¼Ð¸Ð½Ð¸Ð¼Ð°Ð»Ñное из вÑеÑ
знаÑений, оÑлиÑнÑÑ
Ð¾Ñ NULL. ÐмееÑÑÑ Ð´Ð»Ñ Ð²ÑеÑ
ÑиÑловÑÑ
и ÑÑÑоковÑÑ
Ñипов, Ñипов-пеÑеÑиÑлений и даÑÑ/вÑемени, Ñипов | Ðа |
ÐÑÑиÑлÑÐµÑ Ð¾Ð±Ñединение вÑÐµÑ Ð²Ñ Ð¾Ð´Ð½ÑÑ Ð·Ð½Ð°Ñений, оÑлиÑнÑÑ Ð¾Ñ NULL. | ÐÐµÑ |
ÐÑÑиÑлÑÐµÑ Ð¿ÐµÑеÑеÑение вÑÐµÑ Ð²Ñ Ð¾Ð´Ð½ÑÑ Ð·Ð½Ð°Ñений, оÑлиÑнÑÑ Ð¾Ñ NULL. | ÐÐµÑ |
СоединÑÐµÑ Ð²Ñе вÑ
однÑе знаÑениÑ, оÑлиÑнÑе Ð¾Ñ NULL, в ÑÑÑокÑ. ÐеÑед каждÑм знаÑением, кÑоме пеÑвого, добавлÑеÑÑÑ ÑооÑвеÑÑÑвÑÑÑий ÑазделиÑелÑ, заданнÑй паÑамеÑÑом | Ðа |
ÐÑÑиÑлÑÐµÑ ÑÑÐ¼Ð¼Ñ Ð²ÑÐµÑ Ð²Ñ Ð¾Ð´Ð½ÑÑ Ð·Ð½Ð°Ñений, оÑлиÑнÑÑ Ð¾Ñ NULL. | Ðа |
СоединÑÐµÑ Ð²Ð¼ÐµÑÑе Ð²Ñ Ð¾Ð´Ð½Ñе XML-знаÑениÑ, оÑлиÑнÑе Ð¾Ñ NULL (Ñм. Ñакже ÐодÑаздел 9.15.1.8). | ÐÐµÑ |
СледÑÐµÑ Ð·Ð°Ð¼ÐµÑиÑÑ, ÑÑо за иÑклÑÑением count, вÑе ÑÑи ÑÑнкÑии возвÑаÑаÑÑ NULL, еÑли Ð´Ð»Ñ Ð½Ð¸Ñ
не бÑла вÑбÑана ни одна ÑÑÑока. Ð ÑаÑÑноÑÑи, ÑÑнкÑÐ¸Ñ sum, не полÑÑив ÑÑÑок, возвÑаÑÐ°ÐµÑ NULL, а не 0, как можно бÑло Ð±Ñ Ð¾Ð¶Ð¸Ð´Ð°ÑÑ, и array_agg в ÑÑом ÑлÑÑае возвÑаÑÐ°ÐµÑ NULL, а не пÑÑÑой маÑÑив. ÐÑли необÑ
одимо, подÑÑавиÑÑ Ð² ÑезÑлÑÑÐ°Ñ 0 или пÑÑÑой маÑÑив вмеÑÑо NULL можно Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÑÑнкÑии coalesce.
ÐгÑегаÑнÑе ÑÑнкÑии array_agg, json_agg, jsonb_agg, json_agg_strict, jsonb_agg_strict, json_object_agg, jsonb_object_agg, json_object_agg_strict, jsonb_object_agg_strict, json_object_agg_unique, jsonb_object_agg_unique, json_object_agg_unique_strict, jsonb_object_agg_unique_strict, string_agg и xmlagg Ñак же, как и подобнÑе полÑзоваÑелÑÑкие агÑегаÑнÑе ÑÑнкÑии, вÑдаÑÑ ÑазнÑе по ÑодеÑÐ¶Ð°Ð½Ð¸Ñ ÑезÑлÑÑаÑÑ Ð² завиÑимоÑÑи Ð¾Ñ Ð¿Ð¾ÑÑдка вÑ
однÑÑ
знаÑений. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð¿Ð¾ÑÑдок не опÑеделÑн, но его можно задаÑÑ, дополнив вÑзов агÑегаÑной ÑÑнкÑии пÑедложением ORDER BY, как опиÑано в ÐодÑазделе 4.2.7. ÐбÑÑно нÑжного ÑезÑлÑÑаÑа Ñакже можно добиÑÑÑÑ, пеÑедав Ð´Ð»Ñ Ð°Ð³ÑегиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑезÑлÑÑÐ°Ñ Ð¿Ð¾Ð´Ð·Ð°Ð¿ÑоÑа Ñ ÑоÑÑиÑовкой. ÐапÑимеÑ:
SELECT xmlagg(x) FROM (SELECT x FROM test ORDER BY y DESC) AS tab;
Ðо ÑÑÑиÑе, ÑÑо ÑÑÐ¾Ñ Ð¿Ð¾Ð´Ñ Ð¾Ð´ Ð¼Ð¾Ð¶ÐµÑ Ð½Ðµ ÑабоÑаÑÑ, еÑли на внеÑнем ÑÑовне запÑоÑа вÑполнÑеÑÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑÐ½Ð°Ñ Ð¾Ð±ÑабоÑка, напÑÐ¸Ð¼ÐµÑ Ñоединение, Ñак как пÑи ÑÑом ÑезÑлÑÑÐ°Ñ Ð¿Ð¾Ð´Ð·Ð°Ð¿ÑоÑа Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿ÐµÑеÑпоÑÑдоÑен пеÑед вÑÑиÑлением агÑегаÑной ÑÑнкÑии.
ÐÑимеÑание
ÐогиÑеÑкие агÑегаÑнÑе ÑÑнкÑии bool_and и bool_or ÑавнознаÑÐ½Ñ Ð¾Ð¿Ð¸ÑаннÑм в ÑÑандаÑÑе SQL агÑегаÑам every и any или some. PostgreSQL поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ every, но не any/some, Ñак как ÑинÑакÑиÑ, опиÑаннÑй в ÑÑандаÑÑе, допÑÑÐºÐ°ÐµÑ Ð½ÐµÐ¾Ð´Ð½Ð¾Ð·Ð½Ð°ÑноÑÑÑ:
SELECT b1 = ANY((SELECT b2 FROM t2 ...)) FROM t1 ...;
ÐдеÑÑ ANY можно ÑаÑÑмаÑÑиваÑÑ Ð¸ как обÑÑвление подзапÑоÑа, и как агÑегаÑнÑÑ ÑÑнкÑиÑ, еÑли ÑÑÐ¾Ñ Ð¿Ð¾Ð´Ð·Ð°Ð¿ÑÐ¾Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ Ð¾Ð´Ð½Ñ ÑÑÑÐ¾ÐºÑ Ñ Ð±ÑлевÑм знаÑением. Таким обÑазом, ÑÑим агÑегаÑнÑм ÑÑнкÑиÑм нелÑÐ·Ñ Ð±Ñло даÑÑ ÑÑандаÑÑнÑе имена.
ÐÑимеÑание
ÐолÑзоваÑели Ñ Ð¾Ð¿ÑÑом иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´ÑÑгиÑ
СУÐÐ SQL могÑÑ Ð±ÑÑÑ Ð½ÐµÐ´Ð¾Ð²Ð¾Ð»ÑÐ½Ñ ÑкоÑоÑÑÑÑ Ð°Ð³ÑегаÑной ÑÑнкÑии count, когда она пÑименÑеÑÑÑ ÐºÐ¾ вÑей ÑаблиÑе. ÐодобнÑй запÑоÑ:
SELECT count(*) FROM sometable;
поÑÑебÑÐµÑ Ð·Ð°ÑÑÐ°Ñ Ð² колиÑеÑÑве, пÑопоÑÑионалÑном ÑазмеÑÑ ÑаблиÑÑ: PostgreSQL пÑидÑÑÑÑ Ð¿Ð¾Ð»Ð½Ð¾ÑÑÑÑ Ð¿ÑоÑканиÑоваÑÑ Ð»Ð¸Ð±Ð¾ вÑÑ ÑаблиÑÑ, либо один из индекÑов, вклÑÑаÑÑий вÑе ÐµÑ ÑÑÑоки.
РТаблиÑе 9.63 пеÑеÑиÑÐ»ÐµÐ½Ñ Ð°Ð³ÑегаÑнÑе ÑÑнкÑии, обÑÑно пÑименÑемÑе в ÑÑаÑиÑÑиÑеÑком анализе. (Ðни вÑÐ´ÐµÐ»ÐµÐ½Ñ Ð¿ÑоÑÑо Ð´Ð»Ñ Ñого, ÑÑÐ¾Ð±Ñ Ð½Ðµ загÑомождаÑÑ ÑпиÑок наиболее попÑлÑÑнÑÑ
агÑегаÑнÑÑ
ÑÑнкÑий.) ФÑнкÑии, показаннÑе как пÑинимаÑÑие ÑиÑловой_Ñип, ÑÑÑеÑÑвÑÑÑ Ð´Ð»Ñ Ñипов smallint, integer, bigint, numeric, real, и double precision. РиÑ
опиÑании под N подÑазÑмеваеÑÑÑ ÑиÑло вÑ
однÑÑ
ÑÑÑок, Ð´Ð»Ñ ÐºÐ¾ÑоÑÑÑ
вÑе вÑ
однÑе вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð¾ÑлиÑÐ½Ñ Ð¾Ñ NULL. Ðо вÑеÑ
ÑлÑÑаÑÑ
, когда вÑÑиÑление не Ð¸Ð¼ÐµÐµÑ ÑмÑÑла, напÑимеÑ, когда N Ñавно нÑлÑ, возвÑаÑаеÑÑÑ null.
ТаблиÑа 9.63. ÐгÑегаÑнÑе ÑÑнкÑии Ð´Ð»Ñ ÑÑаÑиÑÑиÑеÑÐºÐ¸Ñ Ð²ÑÑиÑлений
РТаблиÑа 9.64 Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½Ñ Ð½ÐµÐºÐ¾ÑоÑÑе агÑегаÑнÑе ÑÑнкÑии, иÑполÑзÑÑÑие ÑинÑакÑÐ¸Ñ ÑоÑÑиÑÑÑÑиÑ
агÑегаÑнÑÑ
ÑÑнкÑий. ÐÑи ÑÑнкÑии иногда назÑваÑÑÑÑ ÑÑнкÑиÑми «обÑаÑного ÑаÑпÑеделениÑ». ÐÑ
агÑегиÑованнÑе вÑ
однÑе даннÑе ÑоÑмиÑÑÑÑÑÑ Ñказанием ORDER BY, а кÑоме Ñого они могÑÑ Ð¿ÑинимаÑÑ Ð½Ðµ агÑегиÑÑемÑй непоÑÑедÑÑвеннÑй аÑгÑменÑ, коÑоÑÑй вÑÑиÑлÑеÑÑÑ ÑолÑко один Ñаз. ÐÑе ÑÑи ÑÑнкÑии игноÑиÑÑÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ NULL в агÑегиÑÑемÑÑ
даннÑÑ
. ÐÐ»Ñ ÑеÑ
ÑÑнкÑий, коÑоÑÑе пÑинимаÑÑ Ð¿Ð°ÑамеÑÑ fraction, его знаÑение должно бÑÑÑ Ð¼ÐµÐ¶Ð´Ñ 0 и 1; в пÑоÑивном ÑлÑÑае вÑдаÑÑÑÑ Ð¾Ñибка. Ðднако еÑли знаÑение fraction â NULL, они вÑдаÑÑ NULL в ÑезÑлÑÑаÑе.
ТаблиÑа 9.64. СоÑÑиÑÑÑÑие агÑегаÑнÑе ÑÑнкÑии
ÐÑе «гипоÑезиÑÑÑÑие» агÑегаÑнÑе ÑÑнкÑии, пеÑеÑиÑленнÑе в ТаблиÑе 9.65, ÑвÑÐ·Ð°Ð½Ñ Ñ Ð¾Ð´Ð½Ð¾Ð¸Ð¼ÑннÑми оконнÑми ÑÑнкÑиÑми, опÑеделÑннÑми в Разделе 9.22. Ркаждом ÑлÑÑае иÑ
ÑезÑлÑÑÐ°Ñ â знаÑение, коÑоÑое Ð±Ñ Ð²ÐµÑнÑла ÑвÑÐ·Ð°Ð½Ð½Ð°Ñ Ð¾ÐºÐ¾Ð½Ð½Ð°Ñ ÑÑнкÑÐ¸Ñ Ð´Ð»Ñ Â«Ð³Ð¸Ð¿Ð¾ÑеÑиÑеÑкой» ÑÑÑоки, полÑÑенной из аÑгÑменÑов, еÑли Ð±Ñ ÑÐ°ÐºÐ°Ñ ÑÑÑока бÑла добавлена в ÑоÑÑиÑованнÑÑ Ð³ÑÑÐ¿Ð¿Ñ ÑÑÑок, коÑоÑÑÑ Ð¾Ð±ÑазÑÑÑ ÑоÑÑиÑÑÑÑие_аÑгÑменÑÑ. ÐÐ»Ñ Ð²ÑеÑ
ÑÑиÑ
ÑÑнкÑий ÑпиÑок непоÑÑедÑÑвеннÑÑ
аÑгÑменÑов, пеÑеданнÑй в каÑеÑÑве аÑгÑменÑов, по ÑиÑÐ»Ñ Ð¸ ÑÐ¸Ð¿Ñ ÑлеменÑов должен ÑооÑвеÑÑÑвоваÑÑ ÑпиÑкÑ, пеÑÐµÐ´Ð°Ð²Ð°ÐµÐ¼Ð¾Ð¼Ñ Ð² каÑеÑÑве ÑоÑÑиÑÑÑÑиÑ
_аÑгÑменÑов. РоÑлиÑие Ð¾Ñ Ð±Ð¾Ð»ÑÑинÑÑва вÑÑÑоеннÑÑ
агÑегаÑов, даннÑе агÑегаÑÑ Ð½Ðµ ÑвлÑÑÑÑÑ ÑÑÑогими, Ñо еÑÑÑ Ð¾Ð½Ð¸ не игноÑиÑÑÑÑ ÑÑÑоки, ÑодеÑжаÑие NULL. ÐнаÑÐµÐ½Ð¸Ñ NULL ÑоÑÑиÑÑÑÑÑÑ Ð¿Ð¾ пÑавилÑ, Ð·Ð°Ð´Ð°Ð½Ð½Ð¾Ð¼Ñ Ð² пÑедложении ORDER BY.
ТаблиÑа 9.65. ÐипоÑезиÑÑÑÑие агÑегаÑнÑе ÑÑнкÑии
ТаблиÑа 9.66. ÐпеÑаÑии гÑÑппиÑовки
ÐпеÑаÑии гÑÑппиÑовки, показаннÑе в ТаблиÑе 9.66, пÑименÑÑÑÑÑ Ð² ÑоÑеÑании Ñ Ð½Ð°Ð±Ð¾Ñами гÑÑппиÑÐ¾Ð²Ð°Ð½Ð¸Ñ (Ñм. ÐодÑаздел 7.2.4) Ð´Ð»Ñ ÑазлиÑÐµÐ½Ð¸Ñ ÑезÑлÑÑиÑÑÑÑиÑ
ÑÑÑок. ÐÑгÑменÑÑ ÑÑнкÑии GROUPING на Ñамом деле не вÑÑиÑлÑÑÑÑÑ, но они Ð´Ð¾Ð»Ð¶Ð½Ñ Ð² ÑоÑноÑÑи ÑооÑвеÑÑÑвоваÑÑ Ð²ÑÑажениÑм, заданнÑм в пÑедложении GROUP BY на иÑ
ÑÑовне запÑоÑа. ÐапÑимеÑ:
=>SELECT * FROM items_sold;make | model | sales -------+-------+------- Foo | GT | 10 Foo | Tour | 20 Bar | City | 15 Bar | Sport | 5 (4 rows)=>SELECT make, model, GROUPING(make,model), sum(sales) FROM items_sold GROUP BY ROLLUP(make,model);make | model | grouping | sum -------+-------+----------+----- Foo | GT | 0 | 10 Foo | Tour | 0 | 20 Bar | City | 0 | 15 Bar | Sport | 0 | 5 Foo | | 1 | 30 Bar | | 1 | 20 | | 3 | 50 (7 rows)
ÐдеÑÑ Ð·Ð½Ð°Ñение grouping, Ñавное 0 в пеÑвÑÑ
ÑеÑÑÑÑÑ
ÑÑÑокаÑ
, показÑваеÑ, ÑÑо ÑÑи ÑÑÑоки бÑли ÑгÑÑппиÑÐ¾Ð²Ð°Ð½Ñ Ð¾Ð±ÑÑнÑм обÑазом по обоим гÑÑппиÑÑÑÑим ÑÑолбÑам. ÐнаÑение 1 в двÑÑ
пÑедпоÑледниÑ
ÑÑÑокаÑ
показÑваеÑ, ÑÑо ÑÑÐ¾Ð»Ð±ÐµÑ model не бÑл гÑÑппиÑÑÑÑим, а знаÑение 3 в поÑледней ÑÑÑоке показÑваеÑ, ÑÑо пÑи гÑÑппиÑовании не ÑÑиÑÑвалиÑÑ Ð½Ð¸ make, ни model, Ñо еÑÑÑ Ð°Ð³ÑегиÑование вÑполнÑлоÑÑ Ð¿Ð¾ вÑем вÑ
однÑм ÑÑÑокам.