9.20. ÐгÑегаÑнÑе ÑÑнкÑии
ÐгÑегаÑнÑе ÑÑнкÑии полÑÑаÑÑ ÐµÐ´Ð¸Ð½ÑÑвеннÑй ÑезÑлÑÑÐ°Ñ Ð¸Ð· набоÑа Ð²Ñ Ð¾Ð´Ð½ÑÑ Ð·Ð½Ð°Ñений. ÐÑÑÑоеннÑе обÑÑнÑе агÑегаÑнÑе ÑÑнкÑии пеÑеÑиÑÐ»ÐµÐ½Ñ Ð² ТаблиÑе 9.51 и ТаблиÑе 9.52, а ÑоÑÑиÑÑÑÑие агÑегаÑнÑе ÑÑнкÑии â в ТаблиÑе 9.53 и ТаблиÑе 9.54. ÐпеÑаÑии гÑÑппиÑованиÑ, ÑеÑно ÑвÑзаннÑе Ñ Ð°Ð³ÑегаÑнÑми ÑÑнкÑиÑми, пеÑеÑиÑÐ»ÐµÐ½Ñ Ð² ТаблиÑе 9.55. ÐÑобенноÑÑи ÑинÑакÑиÑа агÑегаÑнÑÑ ÑÑнкÑий ÑазÑÑÑнÑÑÑÑÑ Ð² ÐодÑазделе 4.2.7. Ðа дополниÑелÑной вводной инÑоÑмаÑией обÑаÑиÑеÑÑ Ðº РазделÑ 2.7.
ТаблиÑа 9.51. ÐгÑегаÑнÑе ÑÑнкÑии обÑего назнаÑениÑ
| ФÑнкÑÐ¸Ñ | Ð¢Ð¸Ð¿Ñ Ð°ÑгÑменÑа | Тип ÑезÑлÑÑаÑа | ЧаÑÑиÑнÑй Ñежим | ÐпиÑание |
|---|---|---|---|---|
array_agg( | лÑбой Ñип не маÑÑива | маÑÑив ÑлеменÑов Ñ Ñипом аÑгÑменÑа | ÐÐµÑ | Ð²Ñ Ð¾Ð´Ð½Ñе знаÑениÑ, вклÑÑÐ°Ñ NULL, обÑединÑÑÑÑÑ Ð² маÑÑив |
array_agg( | лÑбой Ñип маÑÑива | ÑÐ¾Ñ Ð¶Ðµ, ÑÑо и Ñип аÑгÑменÑа | ÐÐµÑ | Ð²Ñ Ð¾Ð´Ð½Ñе маÑÑÐ¸Ð²Ñ ÑобиÑаÑÑÑÑ Ð² маÑÑив болÑÑей ÑазмеÑноÑÑи (они Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¸Ð¼ÐµÑÑ Ð¾Ð´Ð½Ñ ÑазмеÑноÑÑÑ Ð¸ не могÑÑ Ð±ÑÑÑ Ð¿ÑÑÑÑми или ÑÐ°Ð²Ð½Ñ NULL) |
avg( | smallint, int, bigint, real, double precision, numeric или interval | numeric Ð´Ð»Ñ Ð»ÑбÑÑ
ÑелоÑиÑленнÑÑ
аÑгÑменÑов, double precision Ð´Ð»Ñ Ð°ÑгÑменÑов Ñ Ð¿Ð»Ð°Ð²Ð°ÑÑей ÑоÑкой, в пÑоÑивном ÑлÑÑае Ñип даннÑÑ
аÑгÑменÑа | Ðа | аÑиÑмеÑиÑеÑкое ÑÑеднее Ð´Ð»Ñ Ð²ÑÐµÑ Ð²Ñ Ð¾Ð´Ð½ÑÑ Ð·Ð½Ð°Ñений, оÑлиÑнÑÑ Ð¾Ñ NULL |
bit_and( | smallint, int, bigint или bit | ÑÐ¾Ñ Ð¶Ðµ, ÑÑо и Ñип аÑгÑменÑа | Ðа | побиÑовое Ð Ð´Ð»Ñ Ð²ÑÐµÑ Ð²Ñ Ð¾Ð´Ð½ÑÑ Ð·Ð½Ð°Ñений, не ÑавнÑÑ NULL, или NULL, еÑли ÑÐ°ÐºÐ¸Ñ Ð½ÐµÑ |
bit_or( | smallint, int, bigint или bit | ÑÐ¾Ñ Ð¶Ðµ, ÑÑо и Ñип аÑгÑменÑа | Ðа | побиÑовое ÐÐÐ Ð´Ð»Ñ Ð²ÑÐµÑ Ð²Ñ Ð¾Ð´Ð½ÑÑ Ð·Ð½Ð°Ñений, не ÑавнÑÑ NULL, или NULL, еÑли ÑÐ°ÐºÐ¸Ñ Ð½ÐµÑ |
bool_and( | bool | bool | Ðа | true, еÑли вÑе Ð²Ñ Ð¾Ð´Ð½Ñе знаÑÐµÐ½Ð¸Ñ ÑÐ°Ð²Ð½Ñ true, и false в пÑоÑивном ÑлÑÑае |
bool_or( | bool | bool | Ðа | true, еÑли Ñ Ð¾ÑÑ Ð±Ñ Ð¾Ð´Ð½Ð¾ Ð²Ñ Ð¾Ð´Ð½Ð¾Ðµ знаÑение Ñавно true, и false в пÑоÑивном ÑлÑÑае |
count(*) |  | bigint | Ðа | колиÑеÑÑво Ð²Ñ Ð¾Ð´Ð½ÑÑ ÑÑÑок |
count( | any | bigint | Ðа | колиÑеÑÑво вÑ
однÑÑ
ÑÑÑок, Ð´Ð»Ñ ÐºÐ¾ÑоÑÑÑ
знаÑение вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð½Ðµ Ñавно NULL |
every( | bool | bool | Ðа | Ñиноним bool_and |
json_agg( | any | json | ÐÐµÑ | агÑегиÑÑÐµÑ Ð·Ð½Ð°ÑениÑ, вклÑÑÐ°Ñ NULL, в виде маÑÑива JSON |
jsonb_agg( | any | jsonb | ÐÐµÑ | агÑегиÑÑÐµÑ Ð·Ð½Ð°ÑениÑ, вклÑÑÐ°Ñ NULL, в виде маÑÑива JSON |
json_object_agg( | (any, any) | json | ÐÐµÑ | агÑегиÑÑÐµÑ Ð¿Ð°ÑÑ Ð¸Ð¼Ñ/знаÑение в виде обÑекÑа JSON (NULL допÑÑкаеÑÑÑ Ð² знаÑениÑÑ , но не в Ð¸Ð¼ÐµÐ½Ð°Ñ ) |
jsonb_object_agg( | (any, any) | jsonb | ÐÐµÑ | агÑегиÑÑÐµÑ Ð¿Ð°ÑÑ Ð¸Ð¼Ñ/знаÑение в виде обÑекÑа JSON (NULL допÑÑкаеÑÑÑ Ð² знаÑениÑÑ , но не в Ð¸Ð¼ÐµÐ½Ð°Ñ ) |
max( | лÑбой ÑиÑловой, ÑÑÑоковÑй, ÑеÑевой Ñип или Ñип даÑÑ/вÑемени, либо маÑÑив ÑÑÐ¸Ñ Ñипов | ÑÐ¾Ñ Ð¶Ðµ, ÑÑо и Ñип аÑгÑменÑа | Ðа | макÑималÑное знаÑение вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ ÑÑеди вÑеÑ
вÑ
однÑÑ
даннÑÑ
, оÑлиÑнÑÑ
Ð¾Ñ NULL |
min( | лÑбой ÑиÑловой, ÑÑÑоковÑй, ÑеÑевой Ñип или Ñип даÑÑ/вÑемени, либо маÑÑив ÑÑÐ¸Ñ Ñипов | ÑÐ¾Ñ Ð¶Ðµ, ÑÑо и Ñип аÑгÑменÑа | Ðа | минималÑное знаÑение вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ ÑÑеди вÑеÑ
вÑ
однÑÑ
даннÑÑ
, оÑлиÑнÑÑ
Ð¾Ñ NULL |
string_agg( | (text, text) или (bytea, bytea) | ÑÐ¾Ñ Ð¶Ðµ, ÑÑо и ÑÐ¸Ð¿Ñ Ð°ÑгÑменÑов | ÐÐµÑ | Ð²Ñ Ð¾Ð´Ð½Ñе даннÑе (иÑклÑÑÐ°Ñ NULL) ÑкладÑваÑÑÑÑ Ð² ÑÑÑÐ¾ÐºÑ ÑеÑез заданнÑй ÑазделиÑÐµÐ»Ñ |
sum( | smallint, int, bigint, real, double precision, numeric, interval или money | bigint Ð´Ð»Ñ Ð°ÑгÑменÑов smallint или int, numeric Ð´Ð»Ñ Ð°ÑгÑменÑов bigint, и Ñип аÑгÑменÑа в оÑÑалÑнÑÑ
ÑлÑÑаÑÑ
| Ðа | ÑÑмма знаÑений вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾ вÑем вÑ
однÑм даннÑм, оÑлиÑнÑм Ð¾Ñ NULL |
xmlagg( | xml | xml | ÐÐµÑ | Ñоединение XML-знаÑений, оÑлиÑнÑÑ Ð¾Ñ NULL (Ñм. Ñакже ÐодÑаздел 9.14.1.7) |
СледÑÐµÑ Ð·Ð°Ð¼ÐµÑиÑÑ, ÑÑо за иÑклÑÑением count, вÑе ÑÑи ÑÑнкÑии возвÑаÑаÑÑ NULL, еÑли Ð´Ð»Ñ Ð½Ð¸Ñ
не бÑла вÑбÑана ни одна ÑÑÑока. Ð ÑаÑÑноÑÑи, ÑÑнкÑÐ¸Ñ sum, не полÑÑив ÑÑÑок, возвÑаÑÐ°ÐµÑ NULL, а не 0, как можно бÑло Ð±Ñ Ð¾Ð¶Ð¸Ð´Ð°ÑÑ, и array_agg в ÑÑом ÑлÑÑае возвÑаÑÐ°ÐµÑ NULL, а не пÑÑÑой маÑÑив. ÐÑли необÑ
одимо, подÑÑавиÑÑ Ð² ÑезÑлÑÑÐ°Ñ 0 или пÑÑÑой маÑÑив вмеÑÑо NULL можно Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÑÑнкÑии coalesce.
ÐгÑегаÑнÑе ÑÑнкÑии, поддеÑживаÑÑие ÑаÑÑиÑнÑй Ñежим, ÑвлÑÑÑÑÑ ÐºÐ°Ð½Ð´Ð¸Ð´Ð°Ñами на ÑÑаÑÑие в ÑазлиÑнÑÑ Ð¾Ð¿ÑимизаÑиÑÑ , напÑимеÑ, в паÑаллелÑном агÑегиÑовании.
ÐÑимеÑание
ÐÑÐ»ÐµÐ²Ñ Ð°Ð³ÑегаÑнÑе ÑÑнкÑии bool_and и bool_or ÑооÑвеÑÑÑвÑÑÑ ÑÑандаÑÑнÑм SQL-агÑегаÑам every и any или some. ЧÑо каÑаеÑÑÑ any и some, по ÑÑандаÑÑÑ Ð¸Ñ
ÑинÑакÑÐ¸Ñ Ð´Ð¾Ð¿ÑÑÐºÐ°ÐµÑ Ð½ÐµÐºÐ¾ÑоÑÑÑ Ð½ÐµÐ¾Ð´Ð½Ð¾Ð·Ð½Ð°ÑноÑÑÑ:
SELECT b1 = ANY((SELECT b2 FROM t2 ...)) FROM t1 ...;
ÐдеÑÑ ANY можно ÑаÑÑмаÑÑиваÑÑ Ð¸ как обÑÑвление подзапÑоÑа, и как агÑегаÑнÑÑ ÑÑнкÑиÑ, еÑли ÑÑÐ¾Ñ Ð¿Ð¾Ð´Ð·Ð°Ð¿ÑÐ¾Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ Ð¾Ð´Ð½Ñ ÑÑÑÐ¾ÐºÑ Ñ Ð±ÑлевÑм знаÑением. Таким обÑазом, ÑÑим агÑегаÑнÑм ÑÑнкÑиÑм нелÑÐ·Ñ Ð±Ñло даÑÑ ÑÑандаÑÑнÑе имена.
ÐÑимеÑание
ÐолÑзоваÑели Ñ Ð¾Ð¿ÑÑом иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´ÑÑгиÑ
СУÐÐ SQL могÑÑ Ð±ÑÑÑ Ð½ÐµÐ´Ð¾Ð²Ð¾Ð»ÑÐ½Ñ ÑкоÑоÑÑÑÑ Ð°Ð³ÑегаÑной ÑÑнкÑии count, когда она пÑименÑеÑÑÑ ÐºÐ¾ вÑей ÑаблиÑе. ÐодобнÑй запÑоÑ:
SELECT count(*) FROM sometable;
поÑÑебÑÐµÑ Ð·Ð°ÑÑÐ°Ñ Ð² колиÑеÑÑве, пÑопоÑÑионалÑном ÑазмеÑÑ ÑаблиÑÑ: Postgres Pro пÑидÑÑÑÑ Ð¿Ð¾Ð»Ð½Ð¾ÑÑÑÑ Ð¿ÑоÑканиÑоваÑÑ Ð»Ð¸Ð±Ð¾ вÑÑ ÑаблиÑÑ, либо один из индекÑов, вклÑÑаÑÑий вÑе ÐµÑ ÑÑÑоки.
ÐгÑегаÑнÑе ÑÑнкÑии array_agg, json_agg, jsonb_agg, json_object_agg, jsonb_object_agg, string_agg и xmlagg Ñак же, как и подобнÑе полÑзоваÑелÑÑкие агÑегаÑнÑе ÑÑнкÑии, вÑдаÑÑ ÑазнÑе по ÑодеÑÐ¶Ð°Ð½Ð¸Ñ ÑезÑлÑÑаÑÑ Ð² завиÑимоÑÑи Ð¾Ñ Ð¿Ð¾ÑÑдка вÑ
однÑÑ
знаÑений. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð¿Ð¾ÑÑдок не опÑеделÑн, но его можно задаÑÑ, дополнив вÑзов агÑегаÑной ÑÑнкÑии пÑедложением ORDER BY, как опиÑано в ÐодÑазделе 4.2.7. ÐбÑÑно нÑжного ÑезÑлÑÑаÑа Ñакже можно добиÑÑÑÑ, пеÑедав Ð´Ð»Ñ Ð°Ð³ÑегиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑезÑлÑÑÐ°Ñ Ð¿Ð¾Ð´Ð·Ð°Ð¿ÑоÑа Ñ ÑоÑÑиÑовкой. ÐапÑимеÑ:
SELECT xmlagg(x) FROM (SELECT x FROM test ORDER BY y DESC) AS tab;
Ðо ÑÑÑиÑе, ÑÑо ÑÑÐ¾Ñ Ð¿Ð¾Ð´Ñ Ð¾Ð´ Ð¼Ð¾Ð¶ÐµÑ Ð½Ðµ ÑабоÑаÑÑ, еÑли на внеÑнем ÑÑовне запÑоÑа вÑполнÑеÑÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑÐ½Ð°Ñ Ð¾Ð±ÑабоÑка, напÑимеÑ, Ñоединение, Ñак как пÑи ÑÑом ÑезÑлÑÑÐ°Ñ Ð¿Ð¾Ð´Ð·Ð°Ð¿ÑоÑа Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿ÐµÑеÑпоÑÑдоÑен пеÑед вÑÑиÑлением агÑегаÑной ÑÑнкÑии.
РТаблиÑе 9.52 пеÑеÑиÑÐ»ÐµÐ½Ñ Ð°Ð³ÑегаÑнÑе ÑÑнкÑии, обÑÑно пÑименÑемÑе в ÑÑаÑиÑÑиÑеÑком анализе. (Ðни вÑÐ´ÐµÐ»ÐµÐ½Ñ Ð¿ÑоÑÑо Ð´Ð»Ñ Ñого, ÑÑÐ¾Ð±Ñ Ð½Ðµ загÑомождаÑÑ ÑпиÑок наиболее попÑлÑÑнÑÑ
агÑегаÑнÑÑ
ÑÑнкÑий.) РиÑ
опиÑании под N подÑазÑмеваеÑÑÑ ÑиÑло вÑ
однÑÑ
ÑÑÑок, Ð´Ð»Ñ ÐºÐ¾ÑоÑÑÑ
вÑ
однÑе вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð½Ðµ ÑÐ°Ð²Ð½Ñ NULL. ÐÑе ÑÑи ÑÑнкÑии возвÑаÑаÑÑ NULL во вÑеÑ
ÑлÑÑаÑÑ
, когда вÑÑиÑление беÑÑмÑÑленно, напÑимеÑ, когда N Ñавно 0.
ТаблиÑа 9.52. ÐгÑегаÑнÑе ÑÑнкÑии Ð´Ð»Ñ ÑÑаÑиÑÑиÑеÑÐºÐ¸Ñ Ð²ÑÑиÑлений
РТаблиÑе 9.53 Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½Ñ Ð½ÐµÐºÐ¾ÑоÑÑе агÑегаÑнÑе ÑÑнкÑии, иÑполÑзÑÑÑие ÑинÑакÑÐ¸Ñ ÑоÑÑиÑÑÑÑÐ¸Ñ Ð°Ð³ÑегаÑнÑÑ ÑÑнкÑий. Ðногда Ñакие ÑÑнкÑии ÑÑнкÑиÑми назÑваÑÑ ÑÑнкÑиÑми «обÑаÑного ÑаÑпÑеделениÑ».
ТаблиÑа 9.53. СоÑÑиÑÑÑÑие агÑегаÑнÑе ÑÑнкÑии
ÐÑе агÑегаÑнÑе ÑÑнкÑии, пеÑеÑиÑленнÑе в ТаблиÑе 9.53, игноÑиÑÑÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ NULL пÑи ÑоÑÑиÑовке даннÑÑ
. ÐÐ»Ñ ÑÑнкÑий, пÑинимаÑÑиÑ
паÑамеÑÑ Ð´ÑобÑ, знаÑение ÑÑого паÑамеÑÑа должно бÑÑÑ Ð¾Ñ 0 до 1; в пÑоÑивном ÑлÑÑае Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÐµÑ Ð¾Ñибка. Ðднако еÑли в ÑÑом паÑамеÑÑе пеÑедаÑÑÑÑ NULL, ÑÑи ÑÑнкÑии пÑоÑÑо вÑдаÑÑ NULL.
ÐÑе агÑегаÑнÑе ÑÑнкÑии, пеÑеÑиÑленнÑе в ТаблиÑе 9.54, ÑвÑÐ·Ð°Ð½Ñ Ñ Ð¾Ð´Ð½Ð¾Ð¸Ð¼ÑннÑми оконнÑми ÑÑнкÑиÑми, опÑеделÑннÑми в Разделе 9.21. Ркаждом ÑлÑÑае иÑ
ÑезÑлÑÑÐ°Ñ â знаÑение, коÑоÑое веÑнÑла Ð±Ñ ÑвÑÐ·Ð°Ð½Ð½Ð°Ñ Ð¾ÐºÐ¾Ð½Ð½Ð°Ñ ÑÑнкÑÐ¸Ñ Ð´Ð»Ñ Â«Ð³Ð¸Ð¿Ð¾ÑеÑиÑеÑкой» ÑÑÑоки, полÑÑенной из аÑгÑменÑов, еÑли Ð±Ñ ÑÐ°ÐºÐ°Ñ ÑÑÑока бÑла добавлена в ÑоÑÑиÑованнÑÑ Ð³ÑÑÐ¿Ð¿Ñ ÑÑÑок, коÑоÑÑÑ Ð¾Ð±ÑазÑÑÑ ÑоÑÑиÑованнÑе_аÑгÑменÑÑ.
ТаблиÑа 9.54. ÐипоÑезиÑÑÑÑие агÑегаÑнÑе ÑÑнкÑии
ÐÐ»Ñ Ð²ÑеÑ
ÑÑиÑ
гипоÑезиÑÑÑÑиÑ
агÑегаÑнÑÑ
ÑÑнкÑий непоÑÑедÑÑвеннÑе аÑгÑменÑÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑооÑвеÑÑÑвоваÑÑ (по колиÑеÑÑÐ²Ñ Ð¸ ÑипÑ) ÑоÑÑиÑованнÑм_аÑгÑменÑам. РоÑлиÑие Ð¾Ñ Ð²ÑÑÑоеннÑÑ
агÑегаÑнÑÑ
ÑÑнкÑий, они не ÑвлÑÑÑÑÑ ÑÑÑогими, Ñо еÑÑÑ Ð½Ðµ оÑбÑаÑÑваÑÑ Ð²Ñ
однÑе ÑÑÑоки, ÑодеÑжаÑие NULL. ÐнаÑÐµÐ½Ð¸Ñ NULL ÑоÑÑиÑÑÑÑÑÑ ÑоглаÑно пÑавилÑ, ÑÐºÐ°Ð·Ð°Ð½Ð½Ð¾Ð¼Ñ Ð² пÑедложении ORDER BY.
ТаблиÑа 9.55. ÐпеÑаÑии гÑÑппиÑовки
ÐпеÑаÑии гÑÑппиÑовки пÑименÑÑÑÑÑ Ð² ÑоÑеÑании Ñ Ð½Ð°Ð±Ð¾Ñами гÑÑппиÑÐ¾Ð²Ð°Ð½Ð¸Ñ (Ñм. ÐодÑаздел 7.2.4) Ð´Ð»Ñ ÑазлиÑÐµÐ½Ð¸Ñ ÑезÑлÑÑиÑÑÑÑиÑ
ÑÑÑок. ÐÑгÑменÑÑ Ð¾Ð¿ÐµÑаÑии GROUPING на Ñамом деле не вÑÑиÑлÑÑÑÑÑ, но они Ð´Ð¾Ð»Ð¶Ð½Ñ Ð² ÑоÑноÑÑи ÑооÑвеÑÑÑвоваÑÑ Ð²ÑÑажениÑм, заданнÑм в пÑедложении GROUP BY на иÑ
ÑÑовне запÑоÑа. ÐиÑÑ Ð½Ð°Ð·Ð½Ð°ÑаÑÑÑÑ ÑпÑава налево (пÑавÑй аÑгÑÐ¼ÐµÐ½Ñ Ð¾ÑÑажаеÑÑÑ Ð² младÑем биÑе); Ð±Ð¸Ñ Ñавен 0, еÑли ÑооÑвеÑÑÑвÑÑÑее вÑÑажение воÑло в кÑиÑеÑий гÑÑппиÑовки набоÑа гÑÑппиÑованиÑ, Ð´Ð»Ñ ÐºÐ¾ÑоÑого ÑÑоÑмиÑована ÑÑÑока ÑезÑлÑÑаÑа, или 1 в пÑоÑивном ÑлÑÑае. ÐапÑимеÑ:
=>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)