aggregates.out 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738
  1. --
  2. -- AGGREGATES
  3. --
  4. -- avoid bit-exact output here because operations may not be bit-exact.
  5. SET extra_float_digits = 0;
  6. SELECT avg(four) AS avg_1 FROM onek;
  7. avg_1
  8. --------------------
  9. 1.5000000000000000
  10. (1 row)
  11. SELECT avg(a) AS avg_32 FROM aggtest WHERE a < 100;
  12. avg_32
  13. ---------------------
  14. 32.6666666666666667
  15. (1 row)
  16. -- In 7.1, avg(float4) is computed using float8 arithmetic.
  17. -- Round the result to 3 digits to avoid platform-specific results.
  18. SELECT avg(b)::numeric(10,3) AS avg_107_943 FROM aggtest;
  19. avg_107_943
  20. -------------
  21. 107.943
  22. (1 row)
  23. SELECT avg(gpa) AS avg_3_4 FROM ONLY student;
  24. avg_3_4
  25. ---------
  26. 3.4
  27. (1 row)
  28. SELECT sum(four) AS sum_1500 FROM onek;
  29. sum_1500
  30. ----------
  31. 1500
  32. (1 row)
  33. SELECT sum(a) AS sum_198 FROM aggtest;
  34. sum_198
  35. ---------
  36. 198
  37. (1 row)
  38. SELECT sum(gpa) AS avg_6_8 FROM ONLY student;
  39. avg_6_8
  40. ---------
  41. 6.8
  42. (1 row)
  43. SELECT max(four) AS max_3 FROM onek;
  44. max_3
  45. -------
  46. 3
  47. (1 row)
  48. SELECT max(a) AS max_100 FROM aggtest;
  49. max_100
  50. ---------
  51. 100
  52. (1 row)
  53. SELECT max(aggtest.b) AS max_324_78 FROM aggtest;
  54. max_324_78
  55. ------------
  56. 324.78
  57. (1 row)
  58. SELECT max(student.gpa) AS max_3_7 FROM student;
  59. max_3_7
  60. ---------
  61. 3.7
  62. (1 row)
  63. SELECT stddev_pop(b) FROM aggtest;
  64. stddev_pop
  65. -----------------
  66. 131.10703231895
  67. (1 row)
  68. SELECT stddev_samp(b) FROM aggtest;
  69. stddev_samp
  70. ------------------
  71. 151.389360803998
  72. (1 row)
  73. SELECT var_pop(b) FROM aggtest;
  74. var_pop
  75. ------------------
  76. 17189.0539234823
  77. (1 row)
  78. SELECT var_samp(b) FROM aggtest;
  79. var_samp
  80. ------------------
  81. 22918.7385646431
  82. (1 row)
  83. SELECT stddev_pop(b::numeric) FROM aggtest;
  84. stddev_pop
  85. ------------------
  86. 131.107032862199
  87. (1 row)
  88. SELECT stddev_samp(b::numeric) FROM aggtest;
  89. stddev_samp
  90. ------------------
  91. 151.389361431288
  92. (1 row)
  93. SELECT var_pop(b::numeric) FROM aggtest;
  94. var_pop
  95. --------------------
  96. 17189.054065929769
  97. (1 row)
  98. SELECT var_samp(b::numeric) FROM aggtest;
  99. var_samp
  100. --------------------
  101. 22918.738754573025
  102. (1 row)
  103. -- population variance is defined for a single tuple, sample variance
  104. -- is not
  105. SELECT var_pop(1.0::float8), var_samp(2.0::float8);
  106. var_pop | var_samp
  107. ---------+----------
  108. 0 |
  109. (1 row)
  110. SELECT stddev_pop(3.0::float8), stddev_samp(4.0::float8);
  111. stddev_pop | stddev_samp
  112. ------------+-------------
  113. 0 |
  114. (1 row)
  115. SELECT var_pop('inf'::float8), var_samp('inf'::float8);
  116. var_pop | var_samp
  117. ---------+----------
  118. NaN |
  119. (1 row)
  120. SELECT stddev_pop('inf'::float8), stddev_samp('inf'::float8);
  121. stddev_pop | stddev_samp
  122. ------------+-------------
  123. NaN |
  124. (1 row)
  125. SELECT var_pop('nan'::float8), var_samp('nan'::float8);
  126. var_pop | var_samp
  127. ---------+----------
  128. NaN |
  129. (1 row)
  130. SELECT stddev_pop('nan'::float8), stddev_samp('nan'::float8);
  131. stddev_pop | stddev_samp
  132. ------------+-------------
  133. NaN |
  134. (1 row)
  135. SELECT var_pop(1.0::float4), var_samp(2.0::float4);
  136. var_pop | var_samp
  137. ---------+----------
  138. 0 |
  139. (1 row)
  140. SELECT stddev_pop(3.0::float4), stddev_samp(4.0::float4);
  141. stddev_pop | stddev_samp
  142. ------------+-------------
  143. 0 |
  144. (1 row)
  145. SELECT var_pop('inf'::float4), var_samp('inf'::float4);
  146. var_pop | var_samp
  147. ---------+----------
  148. NaN |
  149. (1 row)
  150. SELECT stddev_pop('inf'::float4), stddev_samp('inf'::float4);
  151. stddev_pop | stddev_samp
  152. ------------+-------------
  153. NaN |
  154. (1 row)
  155. SELECT var_pop('nan'::float4), var_samp('nan'::float4);
  156. var_pop | var_samp
  157. ---------+----------
  158. NaN |
  159. (1 row)
  160. SELECT stddev_pop('nan'::float4), stddev_samp('nan'::float4);
  161. stddev_pop | stddev_samp
  162. ------------+-------------
  163. NaN |
  164. (1 row)
  165. SELECT var_pop('inf'::numeric), var_samp('inf'::numeric);
  166. var_pop | var_samp
  167. ---------+----------
  168. NaN |
  169. (1 row)
  170. SELECT stddev_pop('inf'::numeric), stddev_samp('inf'::numeric);
  171. stddev_pop | stddev_samp
  172. ------------+-------------
  173. NaN |
  174. (1 row)
  175. SELECT var_pop('nan'::numeric), var_samp('nan'::numeric);
  176. var_pop | var_samp
  177. ---------+----------
  178. NaN |
  179. (1 row)
  180. SELECT stddev_pop('nan'::numeric), stddev_samp('nan'::numeric);
  181. stddev_pop | stddev_samp
  182. ------------+-------------
  183. NaN |
  184. (1 row)
  185. -- verify correct results for null and NaN inputs
  186. select sum(null::int4) from generate_series(1,3);
  187. sum
  188. -----
  189. (1 row)
  190. select sum(null::int8) from generate_series(1,3);
  191. sum
  192. -----
  193. (1 row)
  194. select sum(null::numeric) from generate_series(1,3);
  195. sum
  196. -----
  197. (1 row)
  198. select sum(null::float8) from generate_series(1,3);
  199. sum
  200. -----
  201. (1 row)
  202. select avg(null::int4) from generate_series(1,3);
  203. avg
  204. -----
  205. (1 row)
  206. select avg(null::int8) from generate_series(1,3);
  207. avg
  208. -----
  209. (1 row)
  210. select avg(null::numeric) from generate_series(1,3);
  211. avg
  212. -----
  213. (1 row)
  214. select avg(null::float8) from generate_series(1,3);
  215. avg
  216. -----
  217. (1 row)
  218. select sum('NaN'::numeric) from generate_series(1,3);
  219. sum
  220. -----
  221. NaN
  222. (1 row)
  223. select avg('NaN'::numeric) from generate_series(1,3);
  224. avg
  225. -----
  226. NaN
  227. (1 row)
  228. -- verify correct results for infinite inputs
  229. SELECT sum(x::float8), avg(x::float8), var_pop(x::float8)
  230. FROM (VALUES ('1'), ('infinity')) v(x);
  231. sum | avg | var_pop
  232. ----------+----------+---------
  233. Infinity | Infinity | NaN
  234. (1 row)
  235. SELECT sum(x::float8), avg(x::float8), var_pop(x::float8)
  236. FROM (VALUES ('infinity'), ('1')) v(x);
  237. sum | avg | var_pop
  238. ----------+----------+---------
  239. Infinity | Infinity | NaN
  240. (1 row)
  241. SELECT sum(x::float8), avg(x::float8), var_pop(x::float8)
  242. FROM (VALUES ('infinity'), ('infinity')) v(x);
  243. sum | avg | var_pop
  244. ----------+----------+---------
  245. Infinity | Infinity | NaN
  246. (1 row)
  247. SELECT sum(x::float8), avg(x::float8), var_pop(x::float8)
  248. FROM (VALUES ('-infinity'), ('infinity')) v(x);
  249. sum | avg | var_pop
  250. -----+-----+---------
  251. NaN | NaN | NaN
  252. (1 row)
  253. SELECT sum(x::float8), avg(x::float8), var_pop(x::float8)
  254. FROM (VALUES ('-infinity'), ('-infinity')) v(x);
  255. sum | avg | var_pop
  256. -----------+-----------+---------
  257. -Infinity | -Infinity | NaN
  258. (1 row)
  259. SELECT sum(x::numeric), avg(x::numeric), var_pop(x::numeric)
  260. FROM (VALUES ('1'), ('infinity')) v(x);
  261. sum | avg | var_pop
  262. ----------+----------+---------
  263. Infinity | Infinity | NaN
  264. (1 row)
  265. SELECT sum(x::numeric), avg(x::numeric), var_pop(x::numeric)
  266. FROM (VALUES ('infinity'), ('1')) v(x);
  267. sum | avg | var_pop
  268. ----------+----------+---------
  269. Infinity | Infinity | NaN
  270. (1 row)
  271. SELECT sum(x::numeric), avg(x::numeric), var_pop(x::numeric)
  272. FROM (VALUES ('infinity'), ('infinity')) v(x);
  273. sum | avg | var_pop
  274. ----------+----------+---------
  275. Infinity | Infinity | NaN
  276. (1 row)
  277. SELECT sum(x::numeric), avg(x::numeric), var_pop(x::numeric)
  278. FROM (VALUES ('-infinity'), ('infinity')) v(x);
  279. sum | avg | var_pop
  280. -----+-----+---------
  281. NaN | NaN | NaN
  282. (1 row)
  283. SELECT sum(x::numeric), avg(x::numeric), var_pop(x::numeric)
  284. FROM (VALUES ('-infinity'), ('-infinity')) v(x);
  285. sum | avg | var_pop
  286. -----------+-----------+---------
  287. -Infinity | -Infinity | NaN
  288. (1 row)
  289. -- test accuracy with a large input offset
  290. SELECT avg(x::float8), var_pop(x::float8)
  291. FROM (VALUES (100000003), (100000004), (100000006), (100000007)) v(x);
  292. avg | var_pop
  293. -----------+---------
  294. 100000005 | 2.5
  295. (1 row)
  296. SELECT avg(x::float8), var_pop(x::float8)
  297. FROM (VALUES (7000000000005), (7000000000007)) v(x);
  298. avg | var_pop
  299. ---------------+---------
  300. 7000000000006 | 1
  301. (1 row)
  302. -- SQL2003 binary aggregates
  303. SELECT regr_count(b, a) FROM aggtest;
  304. regr_count
  305. ------------
  306. 4
  307. (1 row)
  308. SELECT regr_sxx(b, a) FROM aggtest;
  309. regr_sxx
  310. ----------
  311. 5099
  312. (1 row)
  313. SELECT regr_syy(b, a) FROM aggtest;
  314. regr_syy
  315. ------------------
  316. 68756.2156939293
  317. (1 row)
  318. SELECT regr_sxy(b, a) FROM aggtest;
  319. regr_sxy
  320. ------------------
  321. 2614.51582155004
  322. (1 row)
  323. SELECT regr_avgx(b, a), regr_avgy(b, a) FROM aggtest;
  324. regr_avgx | regr_avgy
  325. -----------+------------------
  326. 49.5 | 107.943152273074
  327. (1 row)
  328. SELECT regr_r2(b, a) FROM aggtest;
  329. regr_r2
  330. --------------------
  331. 0.0194977982031803
  332. (1 row)
  333. SELECT regr_slope(b, a), regr_intercept(b, a) FROM aggtest;
  334. regr_slope | regr_intercept
  335. -------------------+------------------
  336. 0.512750700441271 | 82.5619926012309
  337. (1 row)
  338. SELECT covar_pop(b, a), covar_samp(b, a) FROM aggtest;
  339. covar_pop | covar_samp
  340. -----------------+------------------
  341. 653.62895538751 | 871.505273850014
  342. (1 row)
  343. SELECT corr(b, a) FROM aggtest;
  344. corr
  345. -------------------
  346. 0.139634516517873
  347. (1 row)
  348. -- check single-tuple behavior
  349. SELECT covar_pop(1::float8,2::float8), covar_samp(3::float8,4::float8);
  350. covar_pop | covar_samp
  351. -----------+------------
  352. 0 |
  353. (1 row)
  354. SELECT covar_pop(1::float8,'inf'::float8), covar_samp(3::float8,'inf'::float8);
  355. covar_pop | covar_samp
  356. -----------+------------
  357. NaN |
  358. (1 row)
  359. SELECT covar_pop(1::float8,'nan'::float8), covar_samp(3::float8,'nan'::float8);
  360. covar_pop | covar_samp
  361. -----------+------------
  362. NaN |
  363. (1 row)
  364. -- test accum and combine functions directly
  365. CREATE TABLE regr_test (x float8, y float8);
  366. INSERT INTO regr_test VALUES (10,150),(20,250),(30,350),(80,540),(100,200);
  367. SELECT float8_accum('{4,140,2900}'::float8[], 100);
  368. float8_accum
  369. --------------
  370. {5,240,6280}
  371. (1 row)
  372. SELECT float8_regr_accum('{4,140,2900,1290,83075,15050}'::float8[], 200, 100);
  373. float8_regr_accum
  374. ------------------------------
  375. {5,240,6280,1490,95080,8680}
  376. (1 row)
  377. SELECT float8_combine('{3,60,200}'::float8[], '{0,0,0}'::float8[]);
  378. float8_combine
  379. ----------------
  380. {3,60,200}
  381. (1 row)
  382. SELECT float8_combine('{0,0,0}'::float8[], '{2,180,200}'::float8[]);
  383. float8_combine
  384. ----------------
  385. {2,180,200}
  386. (1 row)
  387. SELECT float8_combine('{3,60,200}'::float8[], '{2,180,200}'::float8[]);
  388. float8_combine
  389. ----------------
  390. {5,240,6280}
  391. (1 row)
  392. SELECT float8_regr_combine('{3,60,200,750,20000,2000}'::float8[],
  393. '{0,0,0,0,0,0}'::float8[]);
  394. float8_regr_combine
  395. ---------------------------
  396. {3,60,200,750,20000,2000}
  397. (1 row)
  398. SELECT float8_regr_combine('{0,0,0,0,0,0}'::float8[],
  399. '{2,180,200,740,57800,-3400}'::float8[]);
  400. float8_regr_combine
  401. -----------------------------
  402. {2,180,200,740,57800,-3400}
  403. (1 row)
  404. SELECT float8_regr_combine('{3,60,200,750,20000,2000}'::float8[],
  405. '{2,180,200,740,57800,-3400}'::float8[]);
  406. float8_regr_combine
  407. ------------------------------
  408. {5,240,6280,1490,95080,8680}
  409. (1 row)
  410. DROP TABLE regr_test;
  411. -- test count, distinct
  412. SELECT count(four) AS cnt_1000 FROM onek;
  413. cnt_1000
  414. ----------
  415. 1000
  416. (1 row)
  417. SELECT count(DISTINCT four) AS cnt_4 FROM onek;
  418. cnt_4
  419. -------
  420. 4
  421. (1 row)
  422. select ten, count(*), sum(four) from onek
  423. group by ten order by ten;
  424. ten | count | sum
  425. -----+-------+-----
  426. 0 | 100 | 100
  427. 1 | 100 | 200
  428. 2 | 100 | 100
  429. 3 | 100 | 200
  430. 4 | 100 | 100
  431. 5 | 100 | 200
  432. 6 | 100 | 100
  433. 7 | 100 | 200
  434. 8 | 100 | 100
  435. 9 | 100 | 200
  436. (10 rows)
  437. select ten, count(four), sum(DISTINCT four) from onek
  438. group by ten order by ten;
  439. ten | count | sum
  440. -----+-------+-----
  441. 0 | 100 | 2
  442. 1 | 100 | 4
  443. 2 | 100 | 2
  444. 3 | 100 | 4
  445. 4 | 100 | 2
  446. 5 | 100 | 4
  447. 6 | 100 | 2
  448. 7 | 100 | 4
  449. 8 | 100 | 2
  450. 9 | 100 | 4
  451. (10 rows)
  452. --
  453. -- test for bitwise integer aggregates
  454. --
  455. CREATE TEMPORARY TABLE bitwise_test(
  456. i2 INT2,
  457. i4 INT4,
  458. i8 INT8,
  459. i INTEGER,
  460. x INT2,
  461. y BIT(4)
  462. );
  463. CREATE TEMPORARY TABLE bool_test(
  464. b1 BOOL,
  465. b2 BOOL,
  466. b3 BOOL,
  467. b4 BOOL);
  468. select min(unique1) from tenk1;
  469. min
  470. -----
  471. 0
  472. (1 row)
  473. select max(unique1) from tenk1;
  474. max
  475. ------
  476. 9999
  477. (1 row)
  478. select max(unique1) from tenk1 where unique1 < 42;
  479. max
  480. -----
  481. 41
  482. (1 row)
  483. select max(unique1) from tenk1 where unique1 > 42;
  484. max
  485. ------
  486. 9999
  487. (1 row)
  488. -- the planner may choose a generic aggregate here if parallel query is
  489. -- enabled, since that plan will be parallel safe and the "optimized"
  490. -- plan, which has almost identical cost, will not be. we want to test
  491. -- the optimized plan, so temporarily disable parallel query.
  492. begin;
  493. select max(unique1) from tenk1 where unique1 > 42000;
  494. max
  495. -----
  496. (1 row)
  497. rollback;
  498. select max(tenthous) from tenk1 where thousand = 33;
  499. max
  500. ------
  501. 9033
  502. (1 row)
  503. select min(tenthous) from tenk1 where thousand = 33;
  504. min
  505. -----
  506. 33
  507. (1 row)
  508. select distinct max(unique2) from tenk1;
  509. max
  510. ------
  511. 9999
  512. (1 row)
  513. select max(unique2) from tenk1 order by 1;
  514. max
  515. ------
  516. 9999
  517. (1 row)
  518. select max(unique2) from tenk1 order by max(unique2);
  519. max
  520. ------
  521. 9999
  522. (1 row)
  523. select max(unique2) from tenk1 order by max(unique2)+1;
  524. max
  525. ------
  526. 9999
  527. (1 row)
  528. select max(100) from tenk1;
  529. max
  530. -----
  531. 100
  532. (1 row)
  533. -- try it on an inheritance tree
  534. create table minmaxtest(f1 int);
  535. create index minmaxtesti on minmaxtest(f1);
  536. create index minmaxtest1i on minmaxtest1(f1);
  537. create index minmaxtest2i on minmaxtest2(f1 desc);
  538. insert into minmaxtest values(11), (12);
  539. --
  540. -- Test removal of redundant GROUP BY columns
  541. --
  542. create temp table t1 (a int, b int, c int, d int, primary key (a, b));
  543. create temp table t2 (x int, y int, z int, primary key (x, y));
  544. drop table t2;
  545. --
  546. -- Test GROUP BY matching of join columns that are type-coerced due to USING
  547. --
  548. create temp table t1(f1 int, f2 bigint);
  549. create temp table t2(f1 bigint, f22 bigint);
  550. drop table t1, t2;
  551. select array_agg(distinct a)
  552. from (values (1),(2),(1),(3),(null),(2)) v(a);
  553. array_agg
  554. --------------
  555. {1,2,3,NULL}
  556. (1 row)
  557. -- string_agg tests
  558. select string_agg(a,',') from (values('aaaa'),('bbbb'),('cccc')) g(a);
  559. string_agg
  560. ----------------
  561. aaaa,bbbb,cccc
  562. (1 row)
  563. select string_agg(a,',') from (values('aaaa'),(null),('bbbb'),('cccc')) g(a);
  564. string_agg
  565. ----------------
  566. aaaa,bbbb,cccc
  567. (1 row)
  568. select string_agg(a,'AB') from (values(null),(null),('bbbb'),('cccc')) g(a);
  569. string_agg
  570. ------------
  571. bbbbABcccc
  572. (1 row)
  573. select string_agg(a,',') from (values(null),(null)) g(a);
  574. string_agg
  575. ------------
  576. (1 row)
  577. -- string_agg bytea tests
  578. create table bytea_test_table(v bytea);
  579. select string_agg(v, '') from bytea_test_table;
  580. string_agg
  581. ------------
  582. (1 row)
  583. insert into bytea_test_table values(decode('ff','hex'));
  584. select string_agg(v, '') from bytea_test_table;
  585. string_agg
  586. ------------
  587. \xff
  588. (1 row)
  589. insert into bytea_test_table values(decode('aa','hex'));
  590. select string_agg(v, '') from bytea_test_table;
  591. string_agg
  592. ------------
  593. \xffaa
  594. (1 row)
  595. select string_agg(v, NULL) from bytea_test_table;
  596. string_agg
  597. ------------
  598. \xffaa
  599. (1 row)
  600. select string_agg(v, decode('ee', 'hex')) from bytea_test_table;
  601. string_agg
  602. ------------
  603. \xffeeaa
  604. (1 row)
  605. drop table bytea_test_table;
  606. -- outer reference in FILTER (PostgreSQL extension)
  607. select (select count(*)
  608. from (values (1)) t0(inner_c))
  609. from (values (2),(3)) t1(outer_c); -- inner query is aggregation query
  610. count
  611. -------
  612. 1
  613. 1
  614. (2 rows)
  615. select p, percentile_cont(p order by p) within group (order by x) -- error
  616. from generate_series(1,5) x,
  617. (values (0::float8),(0.1),(0.25),(0.4),(0.5),(0.6),(0.75),(0.9),(1)) v(p)
  618. group by p order by p;
  619. ERROR: cannot use multiple ORDER BY clauses with WITHIN GROUP
  620. LINE 1: select p, percentile_cont(p order by p) within group (order ...
  621. ^
  622. -- test aggregates with common transition functions share the same states
  623. begin work;