System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 63779f99fa793aafcaa9299f3d178390d5e7e714:


0000: 3c 21 44 4f 43 54 59 50 45 20 68 74 6d 6c 3e 0a  <!DOCTYPE html>.
0010: 3c 68 74 6d 6c 3e 3c 68 65 61 64 3e 0a 3c 6d 65  <html><head>.<me
0020: 74 61 20 6e 61 6d 65 3d 22 76 69 65 77 70 6f 72  ta name="viewpor
0030: 74 22 20 63 6f 6e 74 65 6e 74 3d 22 77 69 64 74  t" content="widt
0040: 68 3d 64 65 76 69 63 65 2d 77 69 64 74 68 2c 20  h=device-width, 
0050: 69 6e 69 74 69 61 6c 2d 73 63 61 6c 65 3d 31 2e  initial-scale=1.
0060: 30 22 3e 0a 3c 6d 65 74 61 20 68 74 74 70 2d 65  0">.<meta http-e
0070: 71 75 69 76 3d 22 63 6f 6e 74 65 6e 74 2d 74 79  quiv="content-ty
0080: 70 65 22 20 63 6f 6e 74 65 6e 74 3d 22 74 65 78  pe" content="tex
0090: 74 2f 68 74 6d 6c 3b 20 63 68 61 72 73 65 74 3d  t/html; charset=
00a0: 55 54 46 2d 38 22 3e 0a 3c 6c 69 6e 6b 20 68 72  UTF-8">.<link hr
00b0: 65 66 3d 22 73 71 6c 69 74 65 2e 63 73 73 22 20  ef="sqlite.css" 
00c0: 72 65 6c 3d 22 73 74 79 6c 65 73 68 65 65 74 22  rel="stylesheet"
00d0: 3e 0a 3c 74 69 74 6c 65 3e 53 51 4c 69 74 65 20  >.<title>SQLite 
00e0: 51 75 65 72 79 20 4c 61 6e 67 75 61 67 65 3a 20  Query Language: 
00f0: 41 67 67 72 65 67 61 74 65 20 46 75 6e 63 74 69  Aggregate Functi
0100: 6f 6e 73 3c 2f 74 69 74 6c 65 3e 0a 3c 21 2d 2d  ons</title>.<!--
0110: 20 70 61 74 68 3d 20 2d 2d 3e 0a 3c 2f 68 65 61   path= -->.</hea
0120: 64 3e 0a 3c 62 6f 64 79 3e 0a 3c 64 69 76 20 63  d>.<body>.<div c
0130: 6c 61 73 73 3d 6e 6f 73 65 61 72 63 68 3e 0a 3c  lass=nosearch>.<
0140: 61 20 68 72 65 66 3d 22 69 6e 64 65 78 2e 68 74  a href="index.ht
0150: 6d 6c 22 3e 0a 3c 69 6d 67 20 63 6c 61 73 73 3d  ml">.<img class=
0160: 22 6c 6f 67 6f 22 20 73 72 63 3d 22 69 6d 61 67  "logo" src="imag
0170: 65 73 2f 73 71 6c 69 74 65 33 37 30 5f 62 61 6e  es/sqlite370_ban
0180: 6e 65 72 2e 67 69 66 22 20 61 6c 74 3d 22 53 51  ner.gif" alt="SQ
0190: 4c 69 74 65 22 20 62 6f 72 64 65 72 3d 22 30 22  Lite" border="0"
01a0: 3e 0a 3c 2f 61 3e 0a 3c 64 69 76 3e 3c 21 2d 2d  >.</a>.<div><!--
01b0: 20 49 45 20 68 61 63 6b 20 74 6f 20 70 72 65 76   IE hack to prev
01c0: 65 6e 74 20 64 69 73 61 70 70 65 61 72 69 6e 67  ent disappearing
01d0: 20 6c 6f 67 6f 20 2d 2d 3e 3c 2f 64 69 76 3e 0a   logo --></div>.
01e0: 3c 64 69 76 20 63 6c 61 73 73 3d 22 74 61 67 6c  <div class="tagl
01f0: 69 6e 65 20 64 65 73 6b 74 6f 70 6f 6e 6c 79 22  ine desktoponly"
0200: 3e 0a 53 6d 61 6c 6c 2e 20 46 61 73 74 2e 20 52  >.Small. Fast. R
0210: 65 6c 69 61 62 6c 65 2e 3c 62 72 3e 43 68 6f 6f  eliable.<br>Choo
0220: 73 65 20 61 6e 79 20 74 68 72 65 65 2e 0a 3c 2f  se any three..</
0230: 64 69 76 3e 0a 3c 64 69 76 20 63 6c 61 73 73 3d  div>.<div class=
0240: 22 6d 65 6e 75 20 6d 61 69 6e 6d 65 6e 75 22 3e  "menu mainmenu">
0250: 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 61 20 68 72 65  .<ul>.<li><a hre
0260: 66 3d 22 69 6e 64 65 78 2e 68 74 6d 6c 22 3e 48  f="index.html">H
0270: 6f 6d 65 3c 2f 61 3e 0a 3c 6c 69 20 63 6c 61 73  ome</a>.<li clas
0280: 73 3d 27 6d 6f 62 69 6c 65 6f 6e 6c 79 27 3e 3c  s='mobileonly'><
0290: 61 20 68 72 65 66 3d 22 6a 61 76 61 73 63 72 69  a href="javascri
02a0: 70 74 3a 76 6f 69 64 28 30 29 22 20 6f 6e 63 6c  pt:void(0)" oncl
02b0: 69 63 6b 3d 27 74 6f 67 67 6c 65 5f 64 69 76 28  ick='toggle_div(
02c0: 22 73 75 62 6d 65 6e 75 22 29 27 3e 4d 65 6e 75  "submenu")'>Menu
02d0: 3c 2f 61 3e 0a 3c 6c 69 20 63 6c 61 73 73 3d 27  </a>.<li class='
02e0: 77 69 64 65 6f 6e 6c 79 27 3e 3c 61 20 68 72 65  wideonly'><a hre
02f0: 66 3d 27 61 62 6f 75 74 2e 68 74 6d 6c 27 3e 41  f='about.html'>A
0300: 62 6f 75 74 3c 2f 61 3e 0a 3c 6c 69 20 63 6c 61  bout</a>.<li cla
0310: 73 73 3d 27 64 65 73 6b 74 6f 70 6f 6e 6c 79 27  ss='desktoponly'
0320: 3e 3c 61 20 68 72 65 66 3d 22 64 6f 63 73 2e 68  ><a href="docs.h
0330: 74 6d 6c 22 3e 44 6f 63 75 6d 65 6e 74 61 74 69  tml">Documentati
0340: 6f 6e 3c 2f 61 3e 0a 3c 6c 69 20 63 6c 61 73 73  on</a>.<li class
0350: 3d 27 64 65 73 6b 74 6f 70 6f 6e 6c 79 27 3e 3c  ='desktoponly'><
0360: 61 20 68 72 65 66 3d 22 64 6f 77 6e 6c 6f 61 64  a href="download
0370: 2e 68 74 6d 6c 22 3e 44 6f 77 6e 6c 6f 61 64 3c  .html">Download<
0380: 2f 61 3e 0a 3c 6c 69 20 63 6c 61 73 73 3d 27 77  /a>.<li class='w
0390: 69 64 65 6f 6e 6c 79 27 3e 3c 61 20 68 72 65 66  ideonly'><a href
03a0: 3d 27 63 6f 70 79 72 69 67 68 74 2e 68 74 6d 6c  ='copyright.html
03b0: 27 3e 4c 69 63 65 6e 73 65 3c 2f 61 3e 0a 3c 6c  '>License</a>.<l
03c0: 69 20 63 6c 61 73 73 3d 27 64 65 73 6b 74 6f 70  i class='desktop
03d0: 6f 6e 6c 79 27 3e 3c 61 20 68 72 65 66 3d 22 73  only'><a href="s
03e0: 75 70 70 6f 72 74 2e 68 74 6d 6c 22 3e 53 75 70  upport.html">Sup
03f0: 70 6f 72 74 3c 2f 61 3e 0a 3c 6c 69 20 63 6c 61  port</a>.<li cla
0400: 73 73 3d 27 64 65 73 6b 74 6f 70 6f 6e 6c 79 27  ss='desktoponly'
0410: 3e 3c 61 20 68 72 65 66 3d 22 70 72 6f 73 75 70  ><a href="prosup
0420: 70 6f 72 74 2e 68 74 6d 6c 22 3e 50 75 72 63 68  port.html">Purch
0430: 61 73 65 3c 2f 61 3e 0a 3c 6c 69 20 63 6c 61 73  ase</a>.<li clas
0440: 73 3d 27 73 65 61 72 63 68 27 20 69 64 3d 27 73  s='search' id='s
0450: 65 61 72 63 68 5f 6d 65 6e 75 62 75 74 74 6f 6e  earch_menubutton
0460: 27 3e 0a 3c 61 20 68 72 65 66 3d 22 6a 61 76 61  '>.<a href="java
0470: 73 63 72 69 70 74 3a 76 6f 69 64 28 30 29 22 20  script:void(0)" 
0480: 6f 6e 63 6c 69 63 6b 3d 27 74 6f 67 67 6c 65 5f  onclick='toggle_
0490: 73 65 61 72 63 68 28 29 27 3e 53 65 61 72 63 68  search()'>Search
04a0: 3c 2f 61 3e 0a 3c 2f 75 6c 3e 0a 3c 2f 64 69 76  </a>.</ul>.</div
04b0: 3e 0a 3c 64 69 76 20 63 6c 61 73 73 3d 22 6d 65  >.<div class="me
04c0: 6e 75 20 73 75 62 6d 65 6e 75 22 20 69 64 3d 22  nu submenu" id="
04d0: 73 75 62 6d 65 6e 75 22 3e 0a 3c 75 6c 3e 0a 3c  submenu">.<ul>.<
04e0: 6c 69 3e 3c 61 20 68 72 65 66 3d 27 61 62 6f 75  li><a href='abou
04f0: 74 2e 68 74 6d 6c 27 3e 41 62 6f 75 74 3c 2f 61  t.html'>About</a
0500: 3e 0a 3c 6c 69 3e 3c 61 20 68 72 65 66 3d 27 64  >.<li><a href='d
0510: 6f 63 73 2e 68 74 6d 6c 27 3e 44 6f 63 75 6d 65  ocs.html'>Docume
0520: 6e 74 61 74 69 6f 6e 3c 2f 61 3e 0a 3c 6c 69 3e  ntation</a>.<li>
0530: 3c 61 20 68 72 65 66 3d 27 64 6f 77 6e 6c 6f 61  <a href='downloa
0540: 64 2e 68 74 6d 6c 27 3e 44 6f 77 6e 6c 6f 61 64  d.html'>Download
0550: 3c 2f 61 3e 0a 3c 6c 69 3e 3c 61 20 68 72 65 66  </a>.<li><a href
0560: 3d 27 73 75 70 70 6f 72 74 2e 68 74 6d 6c 27 3e  ='support.html'>
0570: 53 75 70 70 6f 72 74 3c 2f 61 3e 0a 3c 6c 69 3e  Support</a>.<li>
0580: 3c 61 20 68 72 65 66 3d 27 70 72 6f 73 75 70 70  <a href='prosupp
0590: 6f 72 74 2e 68 74 6d 6c 27 3e 50 75 72 63 68 61  ort.html'>Purcha
05a0: 73 65 3c 2f 61 3e 0a 3c 2f 75 6c 3e 0a 3c 2f 64  se</a>.</ul>.</d
05b0: 69 76 3e 0a 3c 64 69 76 20 63 6c 61 73 73 3d 22  iv>.<div class="
05c0: 73 65 61 72 63 68 6d 65 6e 75 22 20 69 64 3d 22  searchmenu" id="
05d0: 73 65 61 72 63 68 6d 65 6e 75 22 3e 0a 3c 66 6f  searchmenu">.<fo
05e0: 72 6d 20 6d 65 74 68 6f 64 3d 22 47 45 54 22 20  rm method="GET" 
05f0: 61 63 74 69 6f 6e 3d 22 73 65 61 72 63 68 22 3e  action="search">
0600: 0a 3c 73 65 6c 65 63 74 20 6e 61 6d 65 3d 22 73  .<select name="s
0610: 22 20 69 64 3d 22 73 65 61 72 63 68 74 79 70 65  " id="searchtype
0620: 22 3e 0a 3c 6f 70 74 69 6f 6e 20 76 61 6c 75 65  ">.<option value
0630: 3d 22 64 22 3e 53 65 61 72 63 68 20 44 6f 63 75  ="d">Search Docu
0640: 6d 65 6e 74 61 74 69 6f 6e 3c 2f 6f 70 74 69 6f  mentation</optio
0650: 6e 3e 0a 3c 6f 70 74 69 6f 6e 20 76 61 6c 75 65  n>.<option value
0660: 3d 22 63 22 3e 53 65 61 72 63 68 20 43 68 61 6e  ="c">Search Chan
0670: 67 65 6c 6f 67 3c 2f 6f 70 74 69 6f 6e 3e 0a 3c  gelog</option>.<
0680: 2f 73 65 6c 65 63 74 3e 0a 3c 69 6e 70 75 74 20  /select>.<input 
0690: 74 79 70 65 3d 22 74 65 78 74 22 20 6e 61 6d 65  type="text" name
06a0: 3d 22 71 22 20 69 64 3d 22 73 65 61 72 63 68 62  ="q" id="searchb
06b0: 6f 78 22 20 76 61 6c 75 65 3d 22 22 3e 0a 3c 69  ox" value="">.<i
06c0: 6e 70 75 74 20 74 79 70 65 3d 22 73 75 62 6d 69  nput type="submi
06d0: 74 22 20 76 61 6c 75 65 3d 22 47 6f 22 3e 0a 3c  t" value="Go">.<
06e0: 2f 66 6f 72 6d 3e 0a 3c 2f 64 69 76 3e 0a 3c 2f  /form>.</div>.</
06f0: 64 69 76 3e 0a 3c 73 63 72 69 70 74 3e 0a 66 75  div>.<script>.fu
0700: 6e 63 74 69 6f 6e 20 74 6f 67 67 6c 65 5f 64 69  nction toggle_di
0710: 76 28 6e 6d 29 20 7b 0a 76 61 72 20 77 20 3d 20  v(nm) {.var w = 
0720: 64 6f 63 75 6d 65 6e 74 2e 67 65 74 45 6c 65 6d  document.getElem
0730: 65 6e 74 42 79 49 64 28 6e 6d 29 3b 0a 69 66 28  entById(nm);.if(
0740: 20 77 2e 73 74 79 6c 65 2e 64 69 73 70 6c 61 79   w.style.display
0750: 3d 3d 22 62 6c 6f 63 6b 22 20 29 7b 0a 77 2e 73  =="block" ){.w.s
0760: 74 79 6c 65 2e 64 69 73 70 6c 61 79 20 3d 20 22  tyle.display = "
0770: 6e 6f 6e 65 22 3b 0a 7d 65 6c 73 65 7b 0a 77 2e  none";.}else{.w.
0780: 73 74 79 6c 65 2e 64 69 73 70 6c 61 79 20 3d 20  style.display = 
0790: 22 62 6c 6f 63 6b 22 3b 0a 7d 0a 7d 0a 66 75 6e  "block";.}.}.fun
07a0: 63 74 69 6f 6e 20 74 6f 67 67 6c 65 5f 73 65 61  ction toggle_sea
07b0: 72 63 68 28 29 20 7b 0a 76 61 72 20 77 20 3d 20  rch() {.var w = 
07c0: 64 6f 63 75 6d 65 6e 74 2e 67 65 74 45 6c 65 6d  document.getElem
07d0: 65 6e 74 42 79 49 64 28 22 73 65 61 72 63 68 6d  entById("searchm
07e0: 65 6e 75 22 29 3b 0a 69 66 28 20 77 2e 73 74 79  enu");.if( w.sty
07f0: 6c 65 2e 64 69 73 70 6c 61 79 3d 3d 22 62 6c 6f  le.display=="blo
0800: 63 6b 22 20 29 7b 0a 77 2e 73 74 79 6c 65 2e 64  ck" ){.w.style.d
0810: 69 73 70 6c 61 79 20 3d 20 22 6e 6f 6e 65 22 3b  isplay = "none";
0820: 0a 7d 20 65 6c 73 65 20 7b 0a 77 2e 73 74 79 6c  .} else {.w.styl
0830: 65 2e 64 69 73 70 6c 61 79 20 3d 20 22 62 6c 6f  e.display = "blo
0840: 63 6b 22 3b 0a 73 65 74 54 69 6d 65 6f 75 74 28  ck";.setTimeout(
0850: 66 75 6e 63 74 69 6f 6e 28 29 7b 0a 64 6f 63 75  function(){.docu
0860: 6d 65 6e 74 2e 67 65 74 45 6c 65 6d 65 6e 74 42  ment.getElementB
0870: 79 49 64 28 22 73 65 61 72 63 68 62 6f 78 22 29  yId("searchbox")
0880: 2e 66 6f 63 75 73 28 29 0a 7d 2c 20 33 30 29 3b  .focus().}, 30);
0890: 0a 7d 0a 7d 0a 66 75 6e 63 74 69 6f 6e 20 64 69  .}.}.function di
08a0: 76 5f 6f 66 66 28 6e 6d 29 7b 64 6f 63 75 6d 65  v_off(nm){docume
08b0: 6e 74 2e 67 65 74 45 6c 65 6d 65 6e 74 42 79 49  nt.getElementByI
08c0: 64 28 6e 6d 29 2e 73 74 79 6c 65 2e 64 69 73 70  d(nm).style.disp
08d0: 6c 61 79 3d 22 6e 6f 6e 65 22 3b 7d 0a 77 69 6e  lay="none";}.win
08e0: 64 6f 77 2e 6f 6e 62 65 66 6f 72 65 75 6e 6c 6f  dow.onbeforeunlo
08f0: 61 64 20 3d 20 66 75 6e 63 74 69 6f 6e 28 65 29  ad = function(e)
0900: 7b 64 69 76 5f 6f 66 66 28 22 73 75 62 6d 65 6e  {div_off("submen
0910: 75 22 29 3b 7d 0a 2f 2a 20 44 69 73 61 62 6c 65  u");}./* Disable
0920: 20 74 68 65 20 53 65 61 72 63 68 20 66 65 61 74   the Search feat
0930: 75 72 65 20 69 66 20 77 65 20 61 72 65 20 6e 6f  ure if we are no
0940: 74 20 6f 70 65 72 61 74 69 6e 67 20 66 72 6f 6d  t operating from
0950: 20 43 47 49 2c 20 73 69 6e 63 65 20 2a 2f 0a 2f   CGI, since */./
0960: 2a 20 53 65 61 72 63 68 20 69 73 20 61 63 63 6f  * Search is acco
0970: 6d 70 6c 69 73 68 65 64 20 75 73 69 6e 67 20 43  mplished using C
0980: 47 49 20 61 6e 64 20 77 69 6c 6c 20 6e 6f 74 20  GI and will not 
0990: 77 6f 72 6b 20 77 69 74 68 6f 75 74 20 69 74 2e  work without it.
09a0: 20 2a 2f 0a 69 66 28 20 21 6c 6f 63 61 74 69 6f   */.if( !locatio
09b0: 6e 2e 6f 72 69 67 69 6e 2e 6d 61 74 63 68 20 7c  n.origin.match |
09c0: 7c 20 21 6c 6f 63 61 74 69 6f 6e 2e 6f 72 69 67  | !location.orig
09d0: 69 6e 2e 6d 61 74 63 68 28 2f 68 74 74 70 2f 29  in.match(/http/)
09e0: 20 29 7b 0a 64 6f 63 75 6d 65 6e 74 2e 67 65 74   ){.document.get
09f0: 45 6c 65 6d 65 6e 74 42 79 49 64 28 22 73 65 61  ElementById("sea
0a00: 72 63 68 5f 6d 65 6e 75 62 75 74 74 6f 6e 22 29  rch_menubutton")
0a10: 2e 73 74 79 6c 65 2e 64 69 73 70 6c 61 79 20 3d  .style.display =
0a20: 20 22 6e 6f 6e 65 22 3b 0a 7d 0a 2f 2a 20 55 73   "none";.}./* Us
0a30: 65 64 20 62 79 20 74 68 65 20 48 69 64 65 2f 53  ed by the Hide/S
0a40: 68 6f 77 20 62 75 74 74 6f 6e 20 62 65 73 69 64  how button besid
0a50: 65 20 73 79 6e 74 61 78 20 64 69 61 67 72 61 6d  e syntax diagram
0a60: 73 2c 20 74 6f 20 74 6f 67 67 6c 65 20 74 68 65  s, to toggle the
0a70: 20 2a 2f 0a 66 75 6e 63 74 69 6f 6e 20 68 69 64   */.function hid
0a80: 65 6f 72 73 68 6f 77 28 62 74 6e 2c 6f 62 6a 29  eorshow(btn,obj)
0a90: 7b 0a 76 61 72 20 78 20 3d 20 64 6f 63 75 6d 65  {.var x = docume
0aa0: 6e 74 2e 67 65 74 45 6c 65 6d 65 6e 74 42 79 49  nt.getElementByI
0ab0: 64 28 6f 62 6a 29 3b 0a 76 61 72 20 62 20 3d 20  d(obj);.var b = 
0ac0: 64 6f 63 75 6d 65 6e 74 2e 67 65 74 45 6c 65 6d  document.getElem
0ad0: 65 6e 74 42 79 49 64 28 62 74 6e 29 3b 0a 69 66  entById(btn);.if
0ae0: 28 20 78 2e 73 74 79 6c 65 2e 64 69 73 70 6c 61  ( x.style.displa
0af0: 79 21 3d 27 6e 6f 6e 65 27 20 29 7b 0a 78 2e 73  y!='none' ){.x.s
0b00: 74 79 6c 65 2e 64 69 73 70 6c 61 79 20 3d 20 27  tyle.display = '
0b10: 6e 6f 6e 65 27 3b 0a 62 2e 69 6e 6e 65 72 48 54  none';.b.innerHT
0b20: 4d 4c 3d 27 73 68 6f 77 27 3b 0a 7d 65 6c 73 65  ML='show';.}else
0b30: 7b 0a 78 2e 73 74 79 6c 65 2e 64 69 73 70 6c 61  {.x.style.displa
0b40: 79 20 3d 20 27 27 3b 0a 62 2e 69 6e 6e 65 72 48  y = '';.b.innerH
0b50: 54 4d 4c 3d 27 68 69 64 65 27 3b 0a 7d 0a 72 65  TML='hide';.}.re
0b60: 74 75 72 6e 20 66 61 6c 73 65 3b 0a 7d 0a 3c 2f  turn false;.}.</
0b70: 73 63 72 69 70 74 3e 0a 3c 2f 64 69 76 3e 0a 3c  script>.</div>.<
0b80: 64 69 76 20 63 6c 61 73 73 3d 6e 6f 73 65 61 72  div class=nosear
0b90: 63 68 3e 3c 68 31 20 61 6c 69 67 6e 3d 22 63 65  ch><h1 align="ce
0ba0: 6e 74 65 72 22 3e 53 51 4c 20 41 73 20 55 6e 64  nter">SQL As Und
0bb0: 65 72 73 74 6f 6f 64 20 42 79 20 53 51 4c 69 74  erstood By SQLit
0bc0: 65 3c 2f 68 31 3e 3c 70 3e 3c 61 20 68 72 65 66  e</h1><p><a href
0bd0: 3d 22 6c 61 6e 67 2e 68 74 6d 6c 22 3e 5b 54 6f  ="lang.html">[To
0be0: 70 5d 3c 2f 61 3e 3c 2f 70 3e 3c 68 32 3e 41 67  p]</a></p><h2>Ag
0bf0: 67 72 65 67 61 74 65 20 46 75 6e 63 74 69 6f 6e  gregate Function
0c00: 73 3c 2f 68 32 3e 3c 2f 64 69 76 3e 0a 0a 0a 3c  s</h2></div>...<
0c10: 70 3e 0a 54 68 65 20 61 67 67 72 65 67 61 74 65  p>.The aggregate
0c20: 20 66 75 6e 63 74 69 6f 6e 73 20 73 68 6f 77 6e   functions shown
0c30: 20 62 65 6c 6f 77 20 61 72 65 20 61 76 61 69 6c   below are avail
0c40: 61 62 6c 65 20 62 79 20 64 65 66 61 75 6c 74 2e  able by default.
0c50: 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a 61 67 67    Additional.agg
0c60: 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
0c70: 20 77 72 69 74 74 65 6e 20 69 6e 20 43 20 6d 61   written in C ma
0c80: 79 20 62 65 20 61 64 64 65 64 20 75 73 69 6e 67  y be added using
0c90: 20 74 68 65 20 0a 3c 61 20 68 72 65 66 3d 22 63   the .<a href="c
0ca0: 33 72 65 66 2f 63 72 65 61 74 65 5f 66 75 6e 63  3ref/create_func
0cb0: 74 69 6f 6e 2e 68 74 6d 6c 22 3e 73 71 6c 69 74  tion.html">sqlit
0cc0: 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
0cd0: 6f 6e 28 29 3c 2f 61 3e 3c 2f 61 3e 0a 41 50 49  on()</a></a>.API
0ce0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 49 6e 20 61 6e  .</p>..<p>.In an
0cf0: 79 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  y aggregate func
0d00: 74 69 6f 6e 20 74 68 61 74 20 74 61 6b 65 73 20  tion that takes 
0d10: 61 20 73 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e  a single argumen
0d20: 74 2c 20 74 68 61 74 20 61 72 67 75 6d 65 6e 74  t, that argument
0d30: 0a 63 61 6e 20 62 65 20 70 72 65 63 65 64 65 64  .can be preceded
0d40: 20 62 79 20 74 68 65 20 6b 65 79 77 6f 72 64 20   by the keyword 
0d50: 44 49 53 54 49 4e 43 54 2e 20 20 49 6e 20 73 75  DISTINCT.  In su
0d60: 63 68 20 63 61 73 65 73 2c 20 64 75 70 6c 69 63  ch cases, duplic
0d70: 61 74 65 0a 65 6c 65 6d 65 6e 74 73 20 61 72 65  ate.elements are
0d80: 20 66 69 6c 74 65 72 65 64 20 62 65 66 6f 72 65   filtered before
0d90: 20 62 65 69 6e 67 20 70 61 73 73 65 64 20 69 6e   being passed in
0da0: 74 6f 20 74 68 65 20 61 67 67 72 65 67 61 74 65  to the aggregate
0db0: 20 66 75 6e 63 74 69 6f 6e 2e 0a 46 6f 72 20 65   function..For e
0dc0: 78 61 6d 70 6c 65 2c 20 74 68 65 20 66 75 6e 63  xample, the func
0dd0: 74 69 6f 6e 20 22 63 6f 75 6e 74 28 64 69 73 74  tion "count(dist
0de0: 69 6e 63 74 20 58 29 22 20 77 69 6c 6c 20 72 65  inct X)" will re
0df0: 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 0a  turn the number.
0e00: 6f 66 20 64 69 73 74 69 6e 63 74 20 76 61 6c 75  of distinct valu
0e10: 65 73 20 6f 66 20 63 6f 6c 75 6d 6e 20 58 20 69  es of column X i
0e20: 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20 74 6f  nstead of the to
0e30: 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 6e 6f  tal number of no
0e40: 6e 2d 6e 75 6c 6c 0a 76 61 6c 75 65 73 20 69 6e  n-null.values in
0e50: 20 63 6f 6c 75 6d 6e 20 58 2e 0a 3c 2f 70 3e 0a   column X..</p>.
0e60: 0a 3c 73 74 79 6c 65 3e 0a 23 6c 69 73 74 74 61  .<style>.#listta
0e70: 62 33 33 20 74 72 20 74 64 20 7b 76 65 72 74 69  b33 tr td {verti
0e80: 63 61 6c 2d 61 6c 69 67 6e 3a 74 6f 70 3b 7d 0a  cal-align:top;}.
0e90: 3c 2f 73 74 79 6c 65 3e 0a 3c 74 61 62 6c 65 20  </style>.<table 
0ea0: 69 64 3d 27 6c 69 73 74 74 61 62 33 33 27 20 77  id='listtab33' w
0eb0: 69 64 74 68 3d 27 31 30 30 25 27 3e 3c 2f 74 61  idth='100%'></ta
0ec0: 62 6c 65 3e 0a 3c 73 63 72 69 70 74 3e 0a 76 61  ble>.<script>.va
0ed0: 72 20 6c 69 73 74 69 74 65 6d 73 33 33 20 3d 20  r listitems33 = 
0ee0: 5b 7b 22 75 22 3a 22 6c 61 6e 67 5f 61 67 67 66  [{"u":"lang_aggf
0ef0: 75 6e 63 2e 68 74 6d 6c 23 61 76 67 22 2c 22 78  unc.html#avg","x
0f00: 22 3a 22 61 76 67 28 58 29 22 2c 22 73 22 3a 30  ":"avg(X)","s":0
0f10: 7d 2c 0a 7b 22 75 22 3a 22 6c 61 6e 67 5f 61 67  },.{"u":"lang_ag
0f20: 67 66 75 6e 63 2e 68 74 6d 6c 23 63 6f 75 6e 74  gfunc.html#count
0f30: 22 2c 22 78 22 3a 22 63 6f 75 6e 74 28 2a 29 22  ","x":"count(*)"
0f40: 2c 22 73 22 3a 30 7d 2c 0a 7b 22 75 22 3a 22 6c  ,"s":0},.{"u":"l
0f50: 61 6e 67 5f 61 67 67 66 75 6e 63 2e 68 74 6d 6c  ang_aggfunc.html
0f60: 23 63 6f 75 6e 74 22 2c 22 78 22 3a 22 63 6f 75  #count","x":"cou
0f70: 6e 74 28 58 29 22 2c 22 73 22 3a 30 7d 2c 0a 7b  nt(X)","s":0},.{
0f80: 22 75 22 3a 22 6c 61 6e 67 5f 61 67 67 66 75 6e  "u":"lang_aggfun
0f90: 63 2e 68 74 6d 6c 23 67 72 6f 75 70 63 6f 6e 63  c.html#groupconc
0fa0: 61 74 22 2c 22 78 22 3a 22 67 72 6f 75 70 5f 63  at","x":"group_c
0fb0: 6f 6e 63 61 74 28 58 29 22 2c 22 73 22 3a 30 7d  oncat(X)","s":0}
0fc0: 2c 0a 7b 22 75 22 3a 22 6c 61 6e 67 5f 61 67 67  ,.{"u":"lang_agg
0fd0: 66 75 6e 63 2e 68 74 6d 6c 23 67 72 6f 75 70 63  func.html#groupc
0fe0: 6f 6e 63 61 74 22 2c 22 78 22 3a 22 67 72 6f 75  oncat","x":"grou
0ff0: 70 5f 63 6f 6e 63 61 74 28 58 2c 59 29 22 2c 22  p_concat(X,Y)","
1000: 73 22 3a 30 7d 2c 0a 7b 22 75 22 3a 22 6c 61 6e  s":0},.{"u":"lan
1010: 67 5f 63 6f 72 65 66 75 6e 63 2e 68 74 6d 6c 23  g_corefunc.html#
1020: 6d 61 78 6f 72 65 75 6e 63 22 2c 22 78 22 3a 22  maxoreunc","x":"
1030: 6d 61 78 28 58 29 22 2c 22 73 22 3a 30 7d 2c 0a  max(X)","s":0},.
1040: 7b 22 75 22 3a 22 6c 61 6e 67 5f 63 6f 72 65 66  {"u":"lang_coref
1050: 75 6e 63 2e 68 74 6d 6c 23 6d 69 6e 6f 72 65 75  unc.html#minoreu
1060: 6e 63 22 2c 22 78 22 3a 22 6d 69 6e 28 58 29 22  nc","x":"min(X)"
1070: 2c 22 73 22 3a 30 7d 2c 0a 7b 22 75 22 3a 22 6c  ,"s":0},.{"u":"l
1080: 61 6e 67 5f 61 67 67 66 75 6e 63 2e 68 74 6d 6c  ang_aggfunc.html
1090: 23 73 75 6d 75 6e 63 22 2c 22 78 22 3a 22 73 75  #sumunc","x":"su
10a0: 6d 28 58 29 22 2c 22 73 22 3a 30 7d 2c 0a 7b 22  m(X)","s":0},.{"
10b0: 75 22 3a 22 6c 61 6e 67 5f 61 67 67 66 75 6e 63  u":"lang_aggfunc
10c0: 2e 68 74 6d 6c 23 73 75 6d 75 6e 63 22 2c 22 78  .html#sumunc","x
10d0: 22 3a 22 74 6f 74 61 6c 28 58 29 22 2c 22 73 22  ":"total(X)","s"
10e0: 3a 30 7d 5d 3b 0a 76 61 72 20 6a 20 3d 20 30 3b  :0}];.var j = 0;
10f0: 0a 76 61 72 20 77 20 3d 20 4d 61 74 68 2e 6d 61  .var w = Math.ma
1100: 78 28 64 6f 63 75 6d 65 6e 74 2e 64 6f 63 75 6d  x(document.docum
1110: 65 6e 74 45 6c 65 6d 65 6e 74 2e 63 6c 69 65 6e  entElement.clien
1120: 74 57 69 64 74 68 2c 20 20 77 69 6e 64 6f 77 2e  tWidth,  window.
1130: 69 6e 6e 65 72 57 69 64 74 68 20 7c 7c 20 30 29  innerWidth || 0)
1140: 3b 0a 76 61 72 20 6e 43 6f 6c 20 3d 20 4d 61 74  ;.var nCol = Mat
1150: 68 2e 66 6c 6f 6f 72 28 77 2f 32 32 35 29 3b 0a  h.floor(w/225);.
1160: 69 66 28 6e 43 6f 6c 3c 3d 30 29 20 6e 43 6f 6c  if(nCol<=0) nCol
1170: 3d 31 3b 0a 76 61 72 20 6e 52 6f 77 20 3d 20 4d  =1;.var nRow = M
1180: 61 74 68 2e 63 65 69 6c 28 28 6c 69 73 74 69 74  ath.ceil((listit
1190: 65 6d 73 33 33 2e 6c 65 6e 67 74 68 2b 31 29 2f  ems33.length+1)/
11a0: 6e 43 6f 6c 29 3b 0a 76 61 72 20 68 3d 22 3c 74  nCol);.var h="<t
11b0: 72 3e 3c 74 64 3e 3c 75 6c 20 63 6c 61 73 73 3d  r><td><ul class=
11c0: 27 6d 75 6c 74 69 63 6f 6c 5f 6c 69 73 74 27 3e  'multicol_list'>
11d0: 22 0a 76 61 72 20 65 61 0a 66 6f 72 28 76 61 72  ".var ea.for(var
11e0: 20 69 3d 30 3b 20 69 3c 6c 69 73 74 69 74 65 6d   i=0; i<listitem
11f0: 73 33 33 2e 6c 65 6e 67 74 68 3b 20 69 2b 2b 29  s33.length; i++)
1200: 7b 0a 20 20 69 66 28 20 28 2b 2b 6a 29 3e 6e 52  {.  if( (++j)>nR
1210: 6f 77 20 29 7b 0a 20 20 20 20 68 20 2b 3d 20 22  ow ){.    h += "
1220: 3c 2f 75 6c 3e 3c 2f 74 64 3e 5c 6e 3c 74 64 3e  </ul></td>\n<td>
1230: 3c 75 6c 20 63 6c 61 73 73 3d 27 6d 75 6c 74 69  <ul class='multi
1240: 63 6f 6c 5f 6c 69 73 74 27 3e 5c 6e 22 3b 0a 20  col_list'>\n";. 
1250: 20 20 20 6a 20 3d 20 31 3b 0a 20 20 7d 0a 20 20     j = 1;.  }.  
1260: 69 66 28 6c 69 73 74 69 74 65 6d 73 33 33 5b 69  if(listitems33[i
1270: 5d 2e 75 3d 3d 22 22 20 7c 7c 20 6c 69 73 74 69  ].u=="" || listi
1280: 74 65 6d 73 33 33 5b 69 5d 2e 73 3d 3d 32 29 7b  tems33[i].s==2){
1290: 0a 20 20 20 20 68 20 2b 3d 20 22 3c 6c 69 3e 22  .    h += "<li>"
12a0: 0a 20 20 20 20 65 61 20 3d 20 22 22 0a 20 20 7d  .    ea = "".  }
12b0: 65 6c 73 65 7b 0a 20 20 20 20 68 20 2b 3d 20 22  else{.    h += "
12c0: 3c 6c 69 3e 3c 61 20 68 72 65 66 3d 27 22 3b 0a  <li><a href='";.
12d0: 20 20 20 20 68 20 2b 3d 20 6c 69 73 74 69 74 65      h += listite
12e0: 6d 73 33 33 5b 69 5d 2e 75 3b 0a 20 20 20 20 68  ms33[i].u;.    h
12f0: 20 2b 3d 20 22 27 3e 22 3b 0a 20 20 20 20 65 61   += "'>";.    ea
1300: 20 3d 20 22 3c 2f 61 3e 22 0a 20 20 7d 0a 20 20   = "</a>".  }.  
1310: 69 66 28 6c 69 73 74 69 74 65 6d 73 33 33 5b 69  if(listitems33[i
1320: 5d 2e 73 3d 3d 32 20 7c 7c 20 6c 69 73 74 69 74  ].s==2 || listit
1330: 65 6d 73 33 33 5b 69 5d 2e 73 3d 3d 33 29 20 68  ems33[i].s==3) h
1340: 20 2b 3d 20 22 3c 73 3e 22 0a 20 20 68 20 2b 3d   += "<s>".  h +=
1350: 20 6c 69 73 74 69 74 65 6d 73 33 33 5b 69 5d 2e   listitems33[i].
1360: 78 3b 0a 20 20 69 66 28 6c 69 73 74 69 74 65 6d  x;.  if(listitem
1370: 73 33 33 5b 69 5d 2e 73 3d 3d 32 20 7c 7c 20 6c  s33[i].s==2 || l
1380: 69 73 74 69 74 65 6d 73 33 33 5b 69 5d 2e 73 3d  istitems33[i].s=
1390: 3d 33 29 20 68 20 2b 3d 20 22 3c 2f 73 3e 22 0a  =3) h += "</s>".
13a0: 20 20 68 20 2b 3d 20 65 61 0a 20 20 69 66 28 6c    h += ea.  if(l
13b0: 69 73 74 69 74 65 6d 73 33 33 5b 69 5d 2e 73 3d  istitems33[i].s=
13c0: 3d 31 29 20 68 20 2b 3d 20 22 3c 73 6d 61 6c 6c  =1) h += "<small
13d0: 3e 3c 69 3e 28 65 78 70 29 3c 2f 69 3e 3c 2f 73  ><i>(exp)</i></s
13e0: 6d 61 6c 6c 3e 5c 6e 22 3b 0a 20 20 69 66 28 6c  mall>\n";.  if(l
13f0: 69 73 74 69 74 65 6d 73 33 33 5b 69 5d 2e 73 3d  istitems33[i].s=
1400: 3d 33 29 20 68 20 2b 3d 20 22 26 73 75 70 31 5c  =3) h += "&sup1\
1410: 6e 22 3b 0a 20 20 69 66 28 6c 69 73 74 69 74 65  n";.  if(listite
1420: 6d 73 33 33 5b 69 5d 2e 73 3d 3d 34 29 20 68 20  ms33[i].s==4) h 
1430: 2b 3d 20 22 26 73 75 70 32 5c 6e 22 3b 0a 20 20  += "&sup2\n";.  
1440: 69 66 28 6c 69 73 74 69 74 65 6d 73 33 33 5b 69  if(listitems33[i
1450: 5d 2e 73 3d 3d 35 29 20 68 20 2b 3d 20 22 26 73  ].s==5) h += "&s
1460: 75 70 33 5c 6e 22 3b 0a 7d 0a 64 6f 63 75 6d 65  up3\n";.}.docume
1470: 6e 74 2e 67 65 74 45 6c 65 6d 65 6e 74 42 79 49  nt.getElementByI
1480: 64 28 22 6c 69 73 74 74 61 62 33 33 22 29 2e 69  d("listtab33").i
1490: 6e 6e 65 72 48 54 4d 4c 20 3d 20 68 3b 0a 3c 2f  nnerHTML = h;.</
14a0: 73 63 72 69 70 74 3e 0a 3c 68 72 20 63 6c 61 73  script>.<hr clas
14b0: 73 3d 27 78 68 72 27 3e 0a 3c 64 6c 3e 0a 3c 61  s='xhr'>.<dl>.<a
14c0: 20 6e 61 6d 65 3d 22 61 76 67 22 3e 3c 2f 61 3e   name="avg"></a>
14d0: 0a 3c 64 74 3e 3c 70 3e 3c 62 3e 61 76 67 28 3c  .<dt><p><b>avg(<
14e0: 69 3e 58 3c 2f 69 3e 29 3c 2f 62 3e 3c 2f 64 74  i>X</i>)</b></dt
14f0: 3e 3c 64 64 3e 3c 70 3e 0a 20 20 54 68 65 20 61  ><dd><p>.  The a
1500: 76 67 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20  vg() function.  
1510: 72 65 74 75 72 6e 73 20 74 68 65 20 61 76 65 72  returns the aver
1520: 61 67 65 20 76 61 6c 75 65 20 6f 66 20 61 6c 6c  age value of all
1530: 20 6e 6f 6e 2d 4e 55 4c 4c 20 3c 69 3e 58 3c 2f   non-NULL <i>X</
1540: 69 3e 20 77 69 74 68 69 6e 20 61 0a 20 20 67 72  i> within a.  gr
1550: 6f 75 70 2e 20 20 53 74 72 69 6e 67 20 61 6e 64  oup.  String and
1560: 20 42 4c 4f 42 20 76 61 6c 75 65 73 20 74 68 61   BLOB values tha
1570: 74 20 64 6f 20 6e 6f 74 20 6c 6f 6f 6b 20 6c 69  t do not look li
1580: 6b 65 20 6e 75 6d 62 65 72 73 20 61 72 65 0a 20  ke numbers are. 
1590: 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20   interpreted as 
15a0: 30 2e 0a 20 20 54 68 65 20 72 65 73 75 6c 74 20  0..  The result 
15b0: 6f 66 20 61 76 67 28 29 20 69 73 20 61 6c 77 61  of avg() is alwa
15c0: 79 73 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f  ys a floating po
15d0: 69 6e 74 20 76 61 6c 75 65 20 61 73 20 6c 6f 6e  int value as lon
15e0: 67 20 61 73 0a 20 20 61 74 20 74 68 65 72 65 20  g as.  at there 
15f0: 69 73 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 20  is at least one 
1600: 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74 20 65  non-NULL input e
1610: 76 65 6e 20 69 66 20 61 6c 6c 0a 20 20 69 6e 70  ven if all.  inp
1620: 75 74 73 20 61 72 65 20 69 6e 74 65 67 65 72 73  uts are integers
1630: 2e 20 20 54 68 65 20 72 65 73 75 6c 74 20 6f 66  .  The result of
1640: 20 61 76 67 28 29 20 69 73 20 4e 55 4c 4c 20 69   avg() is NULL i
1650: 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 0a 20 20  f and only if.  
1660: 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6e 6f 6e  there are no non
1670: 2d 4e 55 4c 4c 20 69 6e 70 75 74 73 2e 20 20 0a  -NULL inputs.  .
1680: 3c 2f 64 64 3e 0a 3c 61 20 6e 61 6d 65 3d 22 63  </dd>.<a name="c
1690: 6f 75 6e 74 22 3e 3c 2f 61 3e 0a 3c 64 74 3e 3c  ount"></a>.<dt><
16a0: 70 3e 3c 62 3e 63 6f 75 6e 74 28 3c 69 3e 58 3c  p><b>count(<i>X<
16b0: 2f 69 3e 29 3c 62 72 20 2f 3e 63 6f 75 6e 74 28  /i>)<br />count(
16c0: 2a 29 3c 2f 62 3e 3c 2f 64 74 3e 3c 64 64 3e 3c  *)</b></dt><dd><
16d0: 70 3e 0a 20 20 54 68 65 20 63 6f 75 6e 74 28 58  p>.  The count(X
16e0: 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
16f0: 6e 73 0a 20 20 61 20 63 6f 75 6e 74 20 6f 66 20  ns.  a count of 
1700: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 69  the number of ti
1710: 6d 65 73 0a 20 20 74 68 61 74 20 3c 69 3e 58 3c  mes.  that <i>X<
1720: 2f 69 3e 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20  /i> is not NULL 
1730: 69 6e 20 61 20 67 72 6f 75 70 2e 20 20 54 68 65  in a group.  The
1740: 20 63 6f 75 6e 74 28 2a 29 20 66 75 6e 63 74 69   count(*) functi
1750: 6f 6e 0a 20 20 28 77 69 74 68 20 6e 6f 20 61 72  on.  (with no ar
1760: 67 75 6d 65 6e 74 73 29 20 72 65 74 75 72 6e 73  guments) returns
1770: 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65   the total numbe
1780: 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65  r of rows in the
1790: 20 67 72 6f 75 70 2e 0a 3c 2f 64 64 3e 0a 3c 61   group..</dd>.<a
17a0: 20 6e 61 6d 65 3d 22 67 72 6f 75 70 63 6f 6e 63   name="groupconc
17b0: 61 74 22 3e 3c 2f 61 3e 0a 3c 64 74 3e 3c 70 3e  at"></a>.<dt><p>
17c0: 3c 62 3e 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28  <b>group_concat(
17d0: 3c 69 3e 58 3c 2f 69 3e 29 3c 62 72 20 2f 3e 67  <i>X</i>)<br />g
17e0: 72 6f 75 70 5f 63 6f 6e 63 61 74 28 3c 69 3e 58  roup_concat(<i>X
17f0: 3c 2f 69 3e 2c 3c 69 3e 59 3c 2f 69 3e 29 3c 2f  </i>,<i>Y</i>)</
1800: 62 3e 3c 2f 64 74 3e 3c 64 64 3e 3c 70 3e 0a 20  b></dt><dd><p>. 
1810: 20 54 68 65 20 67 72 6f 75 70 5f 63 6f 6e 63 61   The group_conca
1820: 74 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  t() function ret
1830: 75 72 6e 73 0a 20 20 61 20 73 74 72 69 6e 67 20  urns.  a string 
1840: 77 68 69 63 68 20 69 73 20 74 68 65 20 63 6f 6e  which is the con
1850: 63 61 74 65 6e 61 74 69 6f 6e 20 6f 66 0a 20 20  catenation of.  
1860: 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c  all non-NULL val
1870: 75 65 73 20 6f 66 20 3c 69 3e 58 3c 2f 69 3e 2e  ues of <i>X</i>.
1880: 20 20 49 66 20 70 61 72 61 6d 65 74 65 72 20 3c    If parameter <
1890: 69 3e 59 3c 2f 69 3e 20 69 73 20 70 72 65 73 65  i>Y</i> is prese
18a0: 6e 74 20 74 68 65 6e 0a 20 20 69 74 20 69 73 20  nt then.  it is 
18b0: 75 73 65 64 20 61 73 20 74 68 65 20 73 65 70 61  used as the sepa
18c0: 72 61 74 6f 72 0a 20 20 62 65 74 77 65 65 6e 20  rator.  between 
18d0: 69 6e 73 74 61 6e 63 65 73 20 6f 66 20 3c 69 3e  instances of <i>
18e0: 58 3c 2f 69 3e 2e 20 20 41 20 63 6f 6d 6d 61 20  X</i>.  A comma 
18f0: 28 22 2c 22 29 20 69 73 20 75 73 65 64 20 61 73  (",") is used as
1900: 20 74 68 65 20 73 65 70 61 72 61 74 6f 72 0a 20   the separator. 
1910: 20 69 66 20 3c 69 3e 59 3c 2f 69 3e 20 69 73 20   if <i>Y</i> is 
1920: 6f 6d 69 74 74 65 64 2e 20 20 54 68 65 20 6f 72  omitted.  The or
1930: 64 65 72 20 6f 66 20 74 68 65 20 63 6f 6e 63 61  der of the conca
1940: 74 65 6e 61 74 65 64 20 65 6c 65 6d 65 6e 74 73  tenated elements
1950: 20 69 73 0a 20 20 61 72 62 69 74 72 61 72 79 2e   is.  arbitrary.
1960: 0a 3c 2f 64 64 3e 0a 3c 61 20 6e 61 6d 65 3d 22  .</dd>.<a name="
1970: 6d 61 78 67 67 75 6e 63 22 3e 3c 2f 61 3e 0a 3c  maxggunc"></a>.<
1980: 64 74 3e 3c 70 3e 3c 62 3e 6d 61 78 28 3c 69 3e  dt><p><b>max(<i>
1990: 58 3c 2f 69 3e 29 3c 2f 62 3e 3c 2f 64 74 3e 3c  X</i>)</b></dt><
19a0: 64 64 3e 3c 70 3e 0a 20 20 54 68 65 20 6d 61 78  dd><p>.  The max
19b0: 28 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  () aggregate fun
19c0: 63 74 69 6f 6e 0a 20 20 72 65 74 75 72 6e 73 20  ction.  returns 
19d0: 74 68 65 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75  the maximum valu
19e0: 65 20 6f 66 20 61 6c 6c 20 76 61 6c 75 65 73 20  e of all values 
19f0: 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 20 20  in the group..  
1a00: 54 68 65 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75  The maximum valu
1a10: 65 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 74  e is the value t
1a20: 68 61 74 20 77 6f 75 6c 64 20 62 65 20 72 65 74  hat would be ret
1a30: 75 72 6e 65 64 20 6c 61 73 74 20 69 6e 20 61 6e  urned last in an
1a40: 0a 20 20 4f 52 44 45 52 20 42 59 20 6f 6e 20 74  .  ORDER BY on t
1a50: 68 65 20 73 61 6d 65 20 63 6f 6c 75 6d 6e 2e 20  he same column. 
1a60: 20 41 67 67 72 65 67 61 74 65 20 6d 61 78 28 29   Aggregate max()
1a70: 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 20 0a 20   returns NULL . 
1a80: 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20   if and only if 
1a90: 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6e 6f 6e  there are no non
1aa0: 2d 4e 55 4c 4c 20 76 61 6c 75 65 73 20 69 6e 20  -NULL values in 
1ab0: 74 68 65 20 67 72 6f 75 70 2e 0a 3c 2f 64 64 3e  the group..</dd>
1ac0: 0a 3c 61 20 6e 61 6d 65 3d 22 6d 69 6e 67 67 75  .<a name="minggu
1ad0: 6e 63 22 3e 3c 2f 61 3e 0a 3c 64 74 3e 3c 70 3e  nc"></a>.<dt><p>
1ae0: 3c 62 3e 6d 69 6e 28 3c 69 3e 58 3c 2f 69 3e 29  <b>min(<i>X</i>)
1af0: 3c 2f 62 3e 3c 2f 64 74 3e 3c 64 64 3e 3c 70 3e  </b></dt><dd><p>
1b00: 0a 20 20 54 68 65 20 6d 69 6e 28 29 20 61 67 67  .  The min() agg
1b10: 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 0a  regate function.
1b20: 20 20 72 65 74 75 72 6e 73 20 74 68 65 20 6d 69    returns the mi
1b30: 6e 69 6d 75 6d 20 6e 6f 6e 2d 4e 55 4c 4c 20 76  nimum non-NULL v
1b40: 61 6c 75 65 20 6f 66 20 61 6c 6c 20 76 61 6c 75  alue of all valu
1b50: 65 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e  es in the group.
1b60: 0a 20 20 54 68 65 20 6d 69 6e 69 6d 75 6d 20 76  .  The minimum v
1b70: 61 6c 75 65 20 69 73 20 74 68 65 20 66 69 72 73  alue is the firs
1b80: 74 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65  t non-NULL value
1b90: 20 74 68 61 74 20 77 6f 75 6c 64 20 61 70 70 65   that would appe
1ba0: 61 72 0a 20 20 69 6e 20 61 6e 20 4f 52 44 45 52  ar.  in an ORDER
1bb0: 20 42 59 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d   BY of the colum
1bc0: 6e 2e 0a 20 20 41 67 67 72 65 67 61 74 65 20 6d  n..  Aggregate m
1bd0: 69 6e 28 29 20 72 65 74 75 72 6e 73 20 4e 55 4c  in() returns NUL
1be0: 4c 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66  L if and only if
1bf0: 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6e 6f   there are no no
1c00: 6e 2d 4e 55 4c 4c 0a 20 20 76 61 6c 75 65 73 20  n-NULL.  values 
1c10: 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 3c 2f  in the group..</
1c20: 64 64 3e 0a 3c 61 20 6e 61 6d 65 3d 22 73 75 6d  dd>.<a name="sum
1c30: 75 6e 63 22 3e 3c 2f 61 3e 0a 3c 64 74 3e 3c 70  unc"></a>.<dt><p
1c40: 3e 3c 62 3e 73 75 6d 28 3c 69 3e 58 3c 2f 69 3e  ><b>sum(<i>X</i>
1c50: 29 3c 62 72 20 2f 3e 74 6f 74 61 6c 28 3c 69 3e  )<br />total(<i>
1c60: 58 3c 2f 69 3e 29 3c 2f 62 3e 3c 2f 64 74 3e 3c  X</i>)</b></dt><
1c70: 64 64 3e 3c 70 3e 0a 20 20 54 68 65 20 73 75 6d  dd><p>.  The sum
1c80: 28 29 20 61 6e 64 20 74 6f 74 61 6c 28 29 20 61  () and total() a
1c90: 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
1ca0: 6e 73 0a 20 20 72 65 74 75 72 6e 20 73 75 6d 20  ns.  return sum 
1cb0: 6f 66 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20  of all non-NULL 
1cc0: 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72  values in the gr
1cd0: 6f 75 70 2e 0a 20 20 49 66 20 74 68 65 72 65 20  oup..  If there 
1ce0: 61 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20  are no non-NULL 
1cf0: 69 6e 70 75 74 20 72 6f 77 73 20 74 68 65 6e 20  input rows then 
1d00: 73 75 6d 28 29 20 72 65 74 75 72 6e 73 0a 20 20  sum() returns.  
1d10: 4e 55 4c 4c 20 62 75 74 20 74 6f 74 61 6c 28 29  NULL but total()
1d20: 20 72 65 74 75 72 6e 73 20 30 2e 30 2e 0a 20 20   returns 0.0..  
1d30: 4e 55 4c 4c 20 69 73 20 6e 6f 74 20 6e 6f 72 6d  NULL is not norm
1d40: 61 6c 6c 79 20 61 20 68 65 6c 70 66 75 6c 20 72  ally a helpful r
1d50: 65 73 75 6c 74 20 66 6f 72 20 74 68 65 20 73 75  esult for the su
1d60: 6d 20 6f 66 20 6e 6f 20 72 6f 77 73 0a 20 20 62  m of no rows.  b
1d70: 75 74 20 74 68 65 20 53 51 4c 20 73 74 61 6e 64  ut the SQL stand
1d80: 61 72 64 20 72 65 71 75 69 72 65 73 20 69 74 20  ard requires it 
1d90: 61 6e 64 20 6d 6f 73 74 20 6f 74 68 65 72 0a 20  and most other. 
1da0: 20 53 51 4c 20 64 61 74 61 62 61 73 65 20 65 6e   SQL database en
1db0: 67 69 6e 65 73 20 69 6d 70 6c 65 6d 65 6e 74 20  gines implement 
1dc0: 73 75 6d 28 29 20 74 68 61 74 20 77 61 79 20 73  sum() that way s
1dd0: 6f 20 53 51 4c 69 74 65 20 64 6f 65 73 20 69 74  o SQLite does it
1de0: 20 69 6e 20 74 68 65 0a 20 20 73 61 6d 65 20 77   in the.  same w
1df0: 61 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 62  ay in order to b
1e00: 65 20 63 6f 6d 70 61 74 69 62 6c 65 2e 20 20 20  e compatible.   
1e10: 54 68 65 20 6e 6f 6e 2d 73 74 61 6e 64 61 72 64  The non-standard
1e20: 20 74 6f 74 61 6c 28 29 20 66 75 6e 63 74 69 6f   total() functio
1e30: 6e 0a 20 20 69 73 20 70 72 6f 76 69 64 65 64 20  n.  is provided 
1e40: 61 73 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20  as a convenient 
1e50: 77 61 79 20 74 6f 20 77 6f 72 6b 20 61 72 6f 75  way to work arou
1e60: 6e 64 20 74 68 69 73 20 64 65 73 69 67 6e 20 70  nd this design p
1e70: 72 6f 62 6c 65 6d 0a 20 20 69 6e 20 74 68 65 20  roblem.  in the 
1e80: 53 51 4c 20 6c 61 6e 67 75 61 67 65 2e 3c 2f 70  SQL language.</p
1e90: 3e 0a 0a 20 20 3c 70 3e 54 68 65 20 72 65 73 75  >..  <p>The resu
1ea0: 6c 74 20 6f 66 20 74 6f 74 61 6c 28 29 20 69 73  lt of total() is
1eb0: 20 61 6c 77 61 79 73 20 61 20 66 6c 6f 61 74 69   always a floati
1ec0: 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a  ng point value..
1ed0: 20 20 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20    The result of 
1ee0: 73 75 6d 28 29 20 69 73 20 61 6e 20 69 6e 74 65  sum() is an inte
1ef0: 67 65 72 20 76 61 6c 75 65 20 69 66 20 61 6c 6c  ger value if all
1f00: 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74 73   non-NULL inputs
1f10: 20 61 72 65 20 69 6e 74 65 67 65 72 73 2e 0a 20   are integers.. 
1f20: 20 49 66 20 61 6e 79 20 69 6e 70 75 74 20 74 6f   If any input to
1f30: 20 73 75 6d 28 29 20 69 73 20 6e 65 69 74 68 65   sum() is neithe
1f40: 72 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 72 20  r an integer or 
1f50: 61 20 4e 55 4c 4c 0a 20 20 74 68 65 6e 20 73 75  a NULL.  then su
1f60: 6d 28 29 20 72 65 74 75 72 6e 73 20 61 20 66 6c  m() returns a fl
1f70: 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c  oating point val
1f80: 75 65 0a 20 20 77 68 69 63 68 20 6d 69 67 68 74  ue.  which might
1f90: 20 62 65 20 61 6e 20 61 70 70 72 6f 78 69 6d 61   be an approxima
1fa0: 74 69 6f 6e 20 74 6f 20 74 68 65 20 74 72 75 65  tion to the true
1fb0: 20 73 75 6d 2e 3c 2f 70 3e 0a 0a 20 20 3c 70 3e   sum.</p>..  <p>
1fc0: 53 75 6d 28 29 20 77 69 6c 6c 20 74 68 72 6f 77  Sum() will throw
1fd0: 20 61 6e 20 22 69 6e 74 65 67 65 72 20 6f 76 65   an "integer ove
1fe0: 72 66 6c 6f 77 22 20 65 78 63 65 70 74 69 6f 6e  rflow" exception
1ff0: 20 69 66 20 61 6c 6c 20 69 6e 70 75 74 73 0a 20   if all inputs. 
2000: 20 61 72 65 20 69 6e 74 65 67 65 72 73 20 6f 72   are integers or
2010: 20 4e 55 4c 4c 0a 20 20 61 6e 64 20 61 6e 20 69   NULL.  and an i
2020: 6e 74 65 67 65 72 20 6f 76 65 72 66 6c 6f 77 20  nteger overflow 
2030: 6f 63 63 75 72 73 20 61 74 20 61 6e 79 20 70 6f  occurs at any po
2040: 69 6e 74 20 64 75 72 69 6e 67 20 74 68 65 20 63  int during the c
2050: 6f 6d 70 75 74 61 74 69 6f 6e 2e 0a 20 20 54 6f  omputation..  To
2060: 74 61 6c 28 29 20 6e 65 76 65 72 20 74 68 72 6f  tal() never thro
2070: 77 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 76  ws an integer ov
2080: 65 72 66 6c 6f 77 2e 0a 3c 2f 64 64 3e 0a 3c 2f  erflow..</dd>.</
2090: 64 6c 3e 0a 0a                                   dl>..