System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact bea8d0b39a2cb0d7eedf7cde8c9ab0390c4bdaf5:


0000: 3c 21 44 4f 43 54 59 50 45 20 48 54 4d 4c 20 50  <!DOCTYPE HTML P
0010: 55 42 4c 49 43 20 22 2d 2f 2f 57 33 43 2f 2f 44  UBLIC "-//W3C//D
0020: 54 44 20 48 54 4d 4c 20 34 2e 30 31 2f 2f 45 4e  TD HTML 4.01//EN
0030: 22 20 22 68 74 74 70 3a 2f 2f 77 77 77 2e 77 33  " "http://www.w3
0040: 2e 6f 72 67 2f 54 52 2f 68 74 6d 6c 34 2f 73 74  .org/TR/html4/st
0050: 72 69 63 74 2e 64 74 64 22 3e 0a 3c 68 74 6d 6c  rict.dtd">.<html
0060: 3e 3c 68 65 61 64 3e 0a 3c 6d 65 74 61 20 6e 61  ><head>.<meta na
0070: 6d 65 3d 22 76 69 65 77 70 6f 72 74 22 20 63 6f  me="viewport" co
0080: 6e 74 65 6e 74 3d 22 77 69 64 74 68 3d 64 65 76  ntent="width=dev
0090: 69 63 65 2d 77 69 64 74 68 2c 20 69 6e 69 74 69  ice-width, initi
00a0: 61 6c 2d 73 63 61 6c 65 3d 31 2e 30 22 3e 0a 3c  al-scale=1.0">.<
00b0: 6d 65 74 61 20 68 74 74 70 2d 65 71 75 69 76 3d  meta http-equiv=
00c0: 22 63 6f 6e 74 65 6e 74 2d 74 79 70 65 22 20 63  "content-type" c
00d0: 6f 6e 74 65 6e 74 3d 22 74 65 78 74 2f 68 74 6d  ontent="text/htm
00e0: 6c 3b 20 63 68 61 72 73 65 74 3d 55 54 46 2d 38  l; charset=UTF-8
00f0: 22 3e 0a 3c 6c 69 6e 6b 20 68 72 65 66 3d 22 73  ">.<link href="s
0100: 71 6c 69 74 65 2e 63 73 73 22 20 72 65 6c 3d 22  qlite.css" rel="
0110: 73 74 79 6c 65 73 68 65 65 74 22 3e 0a 3c 74 69  stylesheet">.<ti
0120: 74 6c 65 3e 53 51 4c 69 74 65 20 51 75 65 72 79  tle>SQLite Query
0130: 20 4c 61 6e 67 75 61 67 65 3a 20 41 67 67 72 65   Language: Aggre
0140: 67 61 74 65 20 46 75 6e 63 74 69 6f 6e 73 3c 2f  gate Functions</
0150: 74 69 74 6c 65 3e 0a 3c 2f 68 65 61 64 3e 0a 3c  title>.</head>.<
0160: 62 6f 64 79 3e 0a 3c 64 69 76 20 63 6c 61 73 73  body>.<div class
0170: 3d 6e 6f 73 65 61 72 63 68 3e 0a 3c 61 20 68 72  =nosearch>.<a hr
0180: 65 66 3d 22 69 6e 64 65 78 2e 68 74 6d 6c 22 3e  ef="index.html">
0190: 0a 3c 69 6d 67 20 63 6c 61 73 73 3d 22 6c 6f 67  .<img class="log
01a0: 6f 22 20 73 72 63 3d 22 69 6d 61 67 65 73 2f 73  o" src="images/s
01b0: 71 6c 69 74 65 33 37 30 5f 62 61 6e 6e 65 72 2e  qlite370_banner.
01c0: 67 69 66 22 20 61 6c 74 3d 22 53 51 4c 69 74 65  gif" alt="SQLite
01d0: 22 20 62 6f 72 64 65 72 3d 22 30 22 3e 0a 3c 2f  " border="0">.</
01e0: 61 3e 0a 3c 64 69 76 3e 3c 21 2d 2d 20 49 45 20  a>.<div><!-- IE 
01f0: 68 61 63 6b 20 74 6f 20 70 72 65 76 65 6e 74 20  hack to prevent 
0200: 64 69 73 61 70 70 65 61 72 69 6e 67 20 6c 6f 67  disappearing log
0210: 6f 20 2d 2d 3e 3c 2f 64 69 76 3e 0a 3c 64 69 76  o --></div>.<div
0220: 20 63 6c 61 73 73 3d 22 74 61 67 6c 69 6e 65 20   class="tagline 
0230: 64 65 73 6b 74 6f 70 6f 6e 6c 79 22 3e 0a 53 6d  desktoponly">.Sm
0240: 61 6c 6c 2e 20 46 61 73 74 2e 20 52 65 6c 69 61  all. Fast. Relia
0250: 62 6c 65 2e 3c 62 72 3e 43 68 6f 6f 73 65 20 61  ble.<br>Choose a
0260: 6e 79 20 74 68 72 65 65 2e 0a 3c 2f 64 69 76 3e  ny three..</div>
0270: 0a 3c 64 69 76 20 63 6c 61 73 73 3d 22 6d 65 6e  .<div class="men
0280: 75 20 6d 61 69 6e 6d 65 6e 75 22 3e 0a 3c 75 6c  u mainmenu">.<ul
0290: 3e 0a 3c 6c 69 3e 3c 61 20 68 72 65 66 3d 22 69  >.<li><a href="i
02a0: 6e 64 65 78 2e 68 74 6d 6c 22 3e 48 6f 6d 65 3c  ndex.html">Home<
02b0: 2f 61 3e 0a 3c 6c 69 20 63 6c 61 73 73 3d 27 6d  /a>.<li class='m
02c0: 6f 62 69 6c 65 6f 6e 6c 79 27 3e 3c 61 20 68 72  obileonly'><a hr
02d0: 65 66 3d 22 6a 61 76 61 73 63 72 69 70 74 3a 76  ef="javascript:v
02e0: 6f 69 64 28 30 29 22 20 6f 6e 63 6c 69 63 6b 3d  oid(0)" onclick=
02f0: 27 74 6f 67 67 6c 65 5f 64 69 76 28 22 73 75 62  'toggle_div("sub
0300: 6d 65 6e 75 22 29 27 3e 4d 65 6e 75 3c 2f 61 3e  menu")'>Menu</a>
0310: 0a 3c 6c 69 20 63 6c 61 73 73 3d 27 77 69 64 65  .<li class='wide
0320: 6f 6e 6c 79 27 3e 3c 61 20 68 72 65 66 3d 27 61  only'><a href='a
0330: 62 6f 75 74 2e 68 74 6d 6c 27 3e 41 62 6f 75 74  bout.html'>About
0340: 3c 2f 61 3e 0a 3c 6c 69 20 63 6c 61 73 73 3d 27  </a>.<li class='
0350: 64 65 73 6b 74 6f 70 6f 6e 6c 79 27 3e 3c 61 20  desktoponly'><a 
0360: 68 72 65 66 3d 22 64 6f 63 73 2e 68 74 6d 6c 22  href="docs.html"
0370: 3e 44 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 3c 2f  >Documentation</
0380: 61 3e 0a 3c 6c 69 20 63 6c 61 73 73 3d 27 64 65  a>.<li class='de
0390: 73 6b 74 6f 70 6f 6e 6c 79 27 3e 3c 61 20 68 72  sktoponly'><a hr
03a0: 65 66 3d 22 64 6f 77 6e 6c 6f 61 64 2e 68 74 6d  ef="download.htm
03b0: 6c 22 3e 44 6f 77 6e 6c 6f 61 64 3c 2f 61 3e 0a  l">Download</a>.
03c0: 3c 6c 69 20 63 6c 61 73 73 3d 27 77 69 64 65 6f  <li class='wideo
03d0: 6e 6c 79 27 3e 3c 61 20 68 72 65 66 3d 27 63 6f  nly'><a href='co
03e0: 70 79 72 69 67 68 74 2e 68 74 6d 6c 27 3e 4c 69  pyright.html'>Li
03f0: 63 65 6e 73 65 3c 2f 61 3e 0a 3c 6c 69 20 63 6c  cense</a>.<li cl
0400: 61 73 73 3d 27 64 65 73 6b 74 6f 70 6f 6e 6c 79  ass='desktoponly
0410: 27 3e 3c 61 20 68 72 65 66 3d 22 73 75 70 70 6f  '><a href="suppo
0420: 72 74 2e 68 74 6d 6c 22 3e 53 75 70 70 6f 72 74  rt.html">Support
0430: 3c 2f 61 3e 0a 3c 6c 69 20 63 6c 61 73 73 3d 27  </a>.<li class='
0440: 64 65 73 6b 74 6f 70 6f 6e 6c 79 27 3e 3c 61 20  desktoponly'><a 
0450: 68 72 65 66 3d 22 70 72 6f 73 75 70 70 6f 72 74  href="prosupport
0460: 2e 68 74 6d 6c 22 3e 50 75 72 63 68 61 73 65 3c  .html">Purchase<
0470: 2f 61 3e 0a 3c 6c 69 20 63 6c 61 73 73 3d 27 73  /a>.<li class='s
0480: 65 61 72 63 68 27 20 69 64 3d 27 73 65 61 72 63  earch' id='searc
0490: 68 5f 6d 65 6e 75 62 75 74 74 6f 6e 27 3e 0a 3c  h_menubutton'>.<
04a0: 61 20 68 72 65 66 3d 22 6a 61 76 61 73 63 72 69  a href="javascri
04b0: 70 74 3a 76 6f 69 64 28 30 29 22 20 6f 6e 63 6c  pt:void(0)" oncl
04c0: 69 63 6b 3d 27 74 6f 67 67 6c 65 5f 64 69 76 28  ick='toggle_div(
04d0: 22 73 65 61 72 63 68 6d 65 6e 75 22 29 27 3e 53  "searchmenu")'>S
04e0: 65 61 72 63 68 3c 2f 61 3e 0a 3c 2f 75 6c 3e 0a  earch</a>.</ul>.
04f0: 3c 2f 64 69 76 3e 0a 3c 64 69 76 20 63 6c 61 73  </div>.<div clas
0500: 73 3d 22 6d 65 6e 75 20 73 75 62 6d 65 6e 75 22  s="menu submenu"
0510: 20 69 64 3d 22 73 75 62 6d 65 6e 75 22 3e 0a 3c   id="submenu">.<
0520: 75 6c 3e 0a 3c 6c 69 3e 3c 61 20 68 72 65 66 3d  ul>.<li><a href=
0530: 27 61 62 6f 75 74 2e 68 74 6d 6c 27 3e 41 62 6f  'about.html'>Abo
0540: 75 74 3c 2f 61 3e 0a 3c 6c 69 3e 3c 61 20 68 72  ut</a>.<li><a hr
0550: 65 66 3d 27 64 6f 63 73 2e 68 74 6d 6c 27 3e 44  ef='docs.html'>D
0560: 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 3c 2f 61 3e  ocumentation</a>
0570: 0a 3c 6c 69 3e 3c 61 20 68 72 65 66 3d 27 64 6f  .<li><a href='do
0580: 77 6e 6c 6f 61 64 2e 68 74 6d 6c 27 3e 44 6f 77  wnload.html'>Dow
0590: 6e 6c 6f 61 64 3c 2f 61 3e 0a 3c 6c 69 3e 3c 61  nload</a>.<li><a
05a0: 20 68 72 65 66 3d 27 73 75 70 70 6f 72 74 2e 68   href='support.h
05b0: 74 6d 6c 27 3e 53 75 70 70 6f 72 74 3c 2f 61 3e  tml'>Support</a>
05c0: 0a 3c 6c 69 3e 3c 61 20 68 72 65 66 3d 27 70 72  .<li><a href='pr
05d0: 6f 73 75 70 70 6f 72 74 2e 68 74 6d 6c 27 3e 50  osupport.html'>P
05e0: 75 72 63 68 61 73 65 3c 2f 61 3e 0a 3c 2f 75 6c  urchase</a>.</ul
05f0: 3e 0a 3c 2f 64 69 76 3e 0a 3c 64 69 76 20 63 6c  >.</div>.<div cl
0600: 61 73 73 3d 22 73 65 61 72 63 68 6d 65 6e 75 22  ass="searchmenu"
0610: 20 69 64 3d 22 73 65 61 72 63 68 6d 65 6e 75 22   id="searchmenu"
0620: 3e 0a 3c 66 6f 72 6d 20 6d 65 74 68 6f 64 3d 22  >.<form method="
0630: 47 45 54 22 20 61 63 74 69 6f 6e 3d 22 73 65 61  GET" action="sea
0640: 72 63 68 22 3e 0a 3c 73 70 61 6e 20 63 6c 61 73  rch">.<span clas
0650: 73 3d 22 64 65 73 6b 74 6f 70 6f 6e 6c 79 22 3e  s="desktoponly">
0660: 53 65 61 72 63 68 20 66 6f 72 3a 3c 2f 73 70 61  Search for:</spa
0670: 6e 3e 20 3c 69 6e 70 75 74 20 74 79 70 65 3d 22  n> <input type="
0680: 74 65 78 74 22 20 6e 61 6d 65 3d 22 71 22 3e 0a  text" name="q">.
0690: 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 73 75 62  <input type="sub
06a0: 6d 69 74 22 20 76 61 6c 75 65 3d 22 47 6f 22 3e  mit" value="Go">
06b0: 0a 3c 2f 66 6f 72 6d 3e 0a 3c 2f 64 69 76 3e 0a  .</form>.</div>.
06c0: 3c 2f 64 69 76 3e 0a 3c 73 63 72 69 70 74 3e 0a  </div>.<script>.
06d0: 66 75 6e 63 74 69 6f 6e 20 74 6f 67 67 6c 65 5f  function toggle_
06e0: 64 69 76 28 6e 6d 29 20 7b 0a 76 61 72 20 77 20  div(nm) {.var w 
06f0: 3d 20 64 6f 63 75 6d 65 6e 74 2e 67 65 74 45 6c  = document.getEl
0700: 65 6d 65 6e 74 42 79 49 64 28 6e 6d 29 3b 0a 69  ementById(nm);.i
0710: 66 28 20 77 2e 73 74 79 6c 65 2e 64 69 73 70 6c  f( w.style.displ
0720: 61 79 3d 3d 22 62 6c 6f 63 6b 22 20 29 7b 0a 77  ay=="block" ){.w
0730: 2e 73 74 79 6c 65 2e 64 69 73 70 6c 61 79 20 3d  .style.display =
0740: 20 22 6e 6f 6e 65 22 3b 0a 7d 65 6c 73 65 7b 0a   "none";.}else{.
0750: 77 2e 73 74 79 6c 65 2e 64 69 73 70 6c 61 79 20  w.style.display 
0760: 3d 20 22 62 6c 6f 63 6b 22 3b 0a 7d 0a 7d 0a 66  = "block";.}.}.f
0770: 75 6e 63 74 69 6f 6e 20 64 69 76 5f 6f 66 66 28  unction div_off(
0780: 6e 6d 29 7b 64 6f 63 75 6d 65 6e 74 2e 67 65 74  nm){document.get
0790: 45 6c 65 6d 65 6e 74 42 79 49 64 28 6e 6d 29 2e  ElementById(nm).
07a0: 73 74 79 6c 65 2e 64 69 73 70 6c 61 79 3d 22 6e  style.display="n
07b0: 6f 6e 65 22 3b 7d 0a 77 69 6e 64 6f 77 2e 6f 6e  one";}.window.on
07c0: 62 65 66 6f 72 65 75 6e 6c 6f 61 64 20 3d 20 66  beforeunload = f
07d0: 75 6e 63 74 69 6f 6e 28 65 29 7b 64 69 76 5f 6f  unction(e){div_o
07e0: 66 66 28 22 73 75 62 6d 65 6e 75 22 29 3b 7d 0a  ff("submenu");}.
07f0: 2f 2a 20 44 69 73 61 62 6c 65 20 74 68 65 20 53  /* Disable the S
0800: 65 61 72 63 68 20 66 65 61 74 75 72 65 20 69 66  earch feature if
0810: 20 77 65 20 61 72 65 20 6e 6f 74 20 6f 70 65 72   we are not oper
0820: 61 74 69 6e 67 20 66 72 6f 6d 20 43 47 49 2c 20  ating from CGI, 
0830: 73 69 6e 63 65 20 2a 2f 0a 2f 2a 20 53 65 61 72  since */./* Sear
0840: 63 68 20 69 73 20 61 63 63 6f 6d 70 6c 69 73 68  ch is accomplish
0850: 65 64 20 75 73 69 6e 67 20 43 47 49 20 61 6e 64  ed using CGI and
0860: 20 77 69 6c 6c 20 6e 6f 74 20 77 6f 72 6b 20 77   will not work w
0870: 69 74 68 6f 75 74 20 69 74 2e 20 2a 2f 0a 69 66  ithout it. */.if
0880: 28 20 21 6c 6f 63 61 74 69 6f 6e 2e 6f 72 69 67  ( !location.orig
0890: 69 6e 2e 6d 61 74 63 68 28 2f 68 74 74 70 2f 29  in.match(/http/)
08a0: 20 29 7b 0a 64 6f 63 75 6d 65 6e 74 2e 67 65 74   ){.document.get
08b0: 45 6c 65 6d 65 6e 74 42 79 49 64 28 22 73 65 61  ElementById("sea
08c0: 72 63 68 5f 6d 65 6e 75 62 75 74 74 6f 6e 22 29  rch_menubutton")
08d0: 2e 73 74 79 6c 65 2e 64 69 73 70 6c 61 79 20 3d  .style.display =
08e0: 20 22 6e 6f 6e 65 22 3b 0a 7d 0a 2f 2a 20 55 73   "none";.}./* Us
08f0: 65 64 20 62 79 20 74 68 65 20 48 69 64 65 2f 53  ed by the Hide/S
0900: 68 6f 77 20 62 75 74 74 6f 6e 20 62 65 73 69 64  how button besid
0910: 65 20 73 79 6e 74 61 78 20 64 69 61 67 72 61 6d  e syntax diagram
0920: 73 2c 20 74 6f 20 74 6f 67 67 6c 65 20 74 68 65  s, to toggle the
0930: 20 2a 2f 0a 66 75 6e 63 74 69 6f 6e 20 68 69 64   */.function hid
0940: 65 6f 72 73 68 6f 77 28 62 74 6e 2c 6f 62 6a 29  eorshow(btn,obj)
0950: 7b 0a 76 61 72 20 78 20 3d 20 64 6f 63 75 6d 65  {.var x = docume
0960: 6e 74 2e 67 65 74 45 6c 65 6d 65 6e 74 42 79 49  nt.getElementByI
0970: 64 28 6f 62 6a 29 3b 0a 76 61 72 20 62 20 3d 20  d(obj);.var b = 
0980: 64 6f 63 75 6d 65 6e 74 2e 67 65 74 45 6c 65 6d  document.getElem
0990: 65 6e 74 42 79 49 64 28 62 74 6e 29 3b 0a 69 66  entById(btn);.if
09a0: 28 20 78 2e 73 74 79 6c 65 2e 64 69 73 70 6c 61  ( x.style.displa
09b0: 79 21 3d 27 6e 6f 6e 65 27 20 29 7b 0a 78 2e 73  y!='none' ){.x.s
09c0: 74 79 6c 65 2e 64 69 73 70 6c 61 79 20 3d 20 27  tyle.display = '
09d0: 6e 6f 6e 65 27 3b 0a 62 2e 69 6e 6e 65 72 48 54  none';.b.innerHT
09e0: 4d 4c 3d 27 73 68 6f 77 27 3b 0a 7d 65 6c 73 65  ML='show';.}else
09f0: 7b 0a 78 2e 73 74 79 6c 65 2e 64 69 73 70 6c 61  {.x.style.displa
0a00: 79 20 3d 20 27 27 3b 0a 62 2e 69 6e 6e 65 72 48  y = '';.b.innerH
0a10: 54 4d 4c 3d 27 68 69 64 65 27 3b 0a 7d 0a 72 65  TML='hide';.}.re
0a20: 74 75 72 6e 20 66 61 6c 73 65 3b 0a 7d 0a 3c 2f  turn false;.}.</
0a30: 73 63 72 69 70 74 3e 0a 3c 2f 64 69 76 3e 0a 3c  script>.</div>.<
0a40: 64 69 76 20 63 6c 61 73 73 3d 6e 6f 73 65 61 72  div class=nosear
0a50: 63 68 3e 3c 68 31 20 61 6c 69 67 6e 3d 22 63 65  ch><h1 align="ce
0a60: 6e 74 65 72 22 3e 53 51 4c 20 41 73 20 55 6e 64  nter">SQL As Und
0a70: 65 72 73 74 6f 6f 64 20 42 79 20 53 51 4c 69 74  erstood By SQLit
0a80: 65 3c 2f 68 31 3e 3c 70 3e 3c 61 20 68 72 65 66  e</h1><p><a href
0a90: 3d 22 6c 61 6e 67 2e 68 74 6d 6c 22 3e 5b 54 6f  ="lang.html">[To
0aa0: 70 5d 3c 2f 61 3e 3c 2f 70 3e 3c 68 32 3e 41 67  p]</a></p><h2>Ag
0ab0: 67 72 65 67 61 74 65 20 46 75 6e 63 74 69 6f 6e  gregate Function
0ac0: 73 3c 2f 68 32 3e 3c 2f 64 69 76 3e 0a 0a 0a 3c  s</h2></div>...<
0ad0: 70 3e 0a 54 68 65 20 61 67 67 72 65 67 61 74 65  p>.The aggregate
0ae0: 20 66 75 6e 63 74 69 6f 6e 73 20 73 68 6f 77 6e   functions shown
0af0: 20 62 65 6c 6f 77 20 61 72 65 20 61 76 61 69 6c   below are avail
0b00: 61 62 6c 65 20 62 79 20 64 65 66 61 75 6c 74 2e  able by default.
0b10: 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a 61 67 67    Additional.agg
0b20: 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
0b30: 20 77 72 69 74 74 65 6e 20 69 6e 20 43 20 6d 61   written in C ma
0b40: 79 20 62 65 20 61 64 64 65 64 20 75 73 69 6e 67  y be added using
0b50: 20 74 68 65 20 0a 3c 61 20 68 72 65 66 3d 22 63   the .<a href="c
0b60: 33 72 65 66 2f 63 72 65 61 74 65 5f 66 75 6e 63  3ref/create_func
0b70: 74 69 6f 6e 2e 68 74 6d 6c 22 3e 73 71 6c 69 74  tion.html">sqlit
0b80: 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
0b90: 6f 6e 28 29 3c 2f 61 3e 3c 2f 61 3e 0a 41 50 49  on()</a></a>.API
0ba0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 49 6e 20 61 6e  .</p>..<p>.In an
0bb0: 79 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  y aggregate func
0bc0: 74 69 6f 6e 20 74 68 61 74 20 74 61 6b 65 73 20  tion that takes 
0bd0: 61 20 73 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e  a single argumen
0be0: 74 2c 20 74 68 61 74 20 61 72 67 75 6d 65 6e 74  t, that argument
0bf0: 0a 63 61 6e 20 62 65 20 70 72 65 63 65 64 65 64  .can be preceded
0c00: 20 62 79 20 74 68 65 20 6b 65 79 77 6f 72 64 20   by the keyword 
0c10: 44 49 53 54 49 4e 43 54 2e 20 20 49 6e 20 73 75  DISTINCT.  In su
0c20: 63 68 20 63 61 73 65 73 2c 20 64 75 70 6c 69 63  ch cases, duplic
0c30: 61 74 65 0a 65 6c 65 6d 65 6e 74 73 20 61 72 65  ate.elements are
0c40: 20 66 69 6c 74 65 72 65 64 20 62 65 66 6f 72 65   filtered before
0c50: 20 62 65 69 6e 67 20 70 61 73 73 65 64 20 69 6e   being passed in
0c60: 74 6f 20 74 68 65 20 61 67 67 72 65 67 61 74 65  to the aggregate
0c70: 20 66 75 6e 63 74 69 6f 6e 2e 0a 46 6f 72 20 65   function..For e
0c80: 78 61 6d 70 6c 65 2c 20 74 68 65 20 66 75 6e 63  xample, the func
0c90: 74 69 6f 6e 20 22 63 6f 75 6e 74 28 64 69 73 74  tion "count(dist
0ca0: 69 6e 63 74 20 58 29 22 20 77 69 6c 6c 20 72 65  inct X)" will re
0cb0: 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 0a  turn the number.
0cc0: 6f 66 20 64 69 73 74 69 6e 63 74 20 76 61 6c 75  of distinct valu
0cd0: 65 73 20 6f 66 20 63 6f 6c 75 6d 6e 20 58 20 69  es of column X i
0ce0: 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20 74 6f  nstead of the to
0cf0: 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 6e 6f  tal number of no
0d00: 6e 2d 6e 75 6c 6c 0a 76 61 6c 75 65 73 20 69 6e  n-null.values in
0d10: 20 63 6f 6c 75 6d 6e 20 58 2e 0a 3c 2f 70 3e 0a   column X..</p>.
0d20: 0a 3c 73 74 79 6c 65 3e 0a 23 6c 69 73 74 74 61  .<style>.#listta
0d30: 62 32 37 20 74 72 20 74 64 20 7b 76 65 72 74 69  b27 tr td {verti
0d40: 63 61 6c 2d 61 6c 69 67 6e 3a 74 6f 70 3b 7d 0a  cal-align:top;}.
0d50: 3c 2f 73 74 79 6c 65 3e 0a 3c 74 61 62 6c 65 20  </style>.<table 
0d60: 69 64 3d 27 6c 69 73 74 74 61 62 32 37 27 20 77  id='listtab27' w
0d70: 69 64 74 68 3d 27 31 30 30 25 27 3e 3c 2f 74 61  idth='100%'></ta
0d80: 62 6c 65 3e 0a 3c 73 63 72 69 70 74 3e 0a 76 61  ble>.<script>.va
0d90: 72 20 6c 69 73 74 69 74 65 6d 73 32 37 20 3d 20  r listitems27 = 
0da0: 5b 7b 22 75 22 3a 22 6c 61 6e 67 5f 61 67 67 66  [{"u":"lang_aggf
0db0: 75 6e 63 2e 68 74 6d 6c 23 61 76 67 22 2c 22 78  unc.html#avg","x
0dc0: 22 3a 22 61 76 67 28 58 29 22 2c 22 73 22 3a 30  ":"avg(X)","s":0
0dd0: 7d 2c 0a 7b 22 75 22 3a 22 6c 61 6e 67 5f 61 67  },.{"u":"lang_ag
0de0: 67 66 75 6e 63 2e 68 74 6d 6c 23 63 6f 75 6e 74  gfunc.html#count
0df0: 22 2c 22 78 22 3a 22 63 6f 75 6e 74 28 2a 29 22  ","x":"count(*)"
0e00: 2c 22 73 22 3a 30 7d 2c 0a 7b 22 75 22 3a 22 6c  ,"s":0},.{"u":"l
0e10: 61 6e 67 5f 61 67 67 66 75 6e 63 2e 68 74 6d 6c  ang_aggfunc.html
0e20: 23 63 6f 75 6e 74 22 2c 22 78 22 3a 22 63 6f 75  #count","x":"cou
0e30: 6e 74 28 58 29 22 2c 22 73 22 3a 30 7d 2c 0a 7b  nt(X)","s":0},.{
0e40: 22 75 22 3a 22 6c 61 6e 67 5f 61 67 67 66 75 6e  "u":"lang_aggfun
0e50: 63 2e 68 74 6d 6c 23 67 72 6f 75 70 63 6f 6e 63  c.html#groupconc
0e60: 61 74 22 2c 22 78 22 3a 22 67 72 6f 75 70 5f 63  at","x":"group_c
0e70: 6f 6e 63 61 74 28 58 29 22 2c 22 73 22 3a 30 7d  oncat(X)","s":0}
0e80: 2c 0a 7b 22 75 22 3a 22 6c 61 6e 67 5f 61 67 67  ,.{"u":"lang_agg
0e90: 66 75 6e 63 2e 68 74 6d 6c 23 67 72 6f 75 70 63  func.html#groupc
0ea0: 6f 6e 63 61 74 22 2c 22 78 22 3a 22 67 72 6f 75  oncat","x":"grou
0eb0: 70 5f 63 6f 6e 63 61 74 28 58 2c 59 29 22 2c 22  p_concat(X,Y)","
0ec0: 73 22 3a 30 7d 2c 0a 7b 22 75 22 3a 22 6c 61 6e  s":0},.{"u":"lan
0ed0: 67 5f 63 6f 72 65 66 75 6e 63 2e 68 74 6d 6c 23  g_corefunc.html#
0ee0: 6d 61 78 6f 72 65 75 6e 63 22 2c 22 78 22 3a 22  maxoreunc","x":"
0ef0: 6d 61 78 28 58 29 22 2c 22 73 22 3a 30 7d 2c 0a  max(X)","s":0},.
0f00: 7b 22 75 22 3a 22 6c 61 6e 67 5f 63 6f 72 65 66  {"u":"lang_coref
0f10: 75 6e 63 2e 68 74 6d 6c 23 6d 69 6e 6f 72 65 75  unc.html#minoreu
0f20: 6e 63 22 2c 22 78 22 3a 22 6d 69 6e 28 58 29 22  nc","x":"min(X)"
0f30: 2c 22 73 22 3a 30 7d 2c 0a 7b 22 75 22 3a 22 6c  ,"s":0},.{"u":"l
0f40: 61 6e 67 5f 61 67 67 66 75 6e 63 2e 68 74 6d 6c  ang_aggfunc.html
0f50: 23 73 75 6d 75 6e 63 22 2c 22 78 22 3a 22 73 75  #sumunc","x":"su
0f60: 6d 28 58 29 22 2c 22 73 22 3a 30 7d 2c 0a 7b 22  m(X)","s":0},.{"
0f70: 75 22 3a 22 6c 61 6e 67 5f 61 67 67 66 75 6e 63  u":"lang_aggfunc
0f80: 2e 68 74 6d 6c 23 73 75 6d 75 6e 63 22 2c 22 78  .html#sumunc","x
0f90: 22 3a 22 74 6f 74 61 6c 28 58 29 22 2c 22 73 22  ":"total(X)","s"
0fa0: 3a 30 7d 5d 3b 0a 76 61 72 20 6a 20 3d 20 30 3b  :0}];.var j = 0;
0fb0: 0a 76 61 72 20 77 20 3d 20 4d 61 74 68 2e 6d 61  .var w = Math.ma
0fc0: 78 28 64 6f 63 75 6d 65 6e 74 2e 64 6f 63 75 6d  x(document.docum
0fd0: 65 6e 74 45 6c 65 6d 65 6e 74 2e 63 6c 69 65 6e  entElement.clien
0fe0: 74 57 69 64 74 68 2c 20 20 77 69 6e 64 6f 77 2e  tWidth,  window.
0ff0: 69 6e 6e 65 72 57 69 64 74 68 20 7c 7c 20 30 29  innerWidth || 0)
1000: 3b 0a 76 61 72 20 6e 43 6f 6c 20 3d 20 4d 61 74  ;.var nCol = Mat
1010: 68 2e 66 6c 6f 6f 72 28 77 2f 32 32 35 29 3b 0a  h.floor(w/225);.
1020: 69 66 28 6e 43 6f 6c 3c 3d 30 29 20 6e 43 6f 6c  if(nCol<=0) nCol
1030: 3d 31 3b 0a 76 61 72 20 6e 52 6f 77 20 3d 20 4d  =1;.var nRow = M
1040: 61 74 68 2e 63 65 69 6c 28 28 6c 69 73 74 69 74  ath.ceil((listit
1050: 65 6d 73 32 37 2e 6c 65 6e 67 74 68 2b 31 29 2f  ems27.length+1)/
1060: 6e 43 6f 6c 29 3b 0a 76 61 72 20 68 3d 22 3c 74  nCol);.var h="<t
1070: 72 3e 3c 74 64 3e 3c 75 6c 20 63 6c 61 73 73 3d  r><td><ul class=
1080: 27 6d 75 6c 74 69 63 6f 6c 5f 6c 69 73 74 27 3e  'multicol_list'>
1090: 22 0a 76 61 72 20 65 61 0a 66 6f 72 28 76 61 72  ".var ea.for(var
10a0: 20 69 3d 30 3b 20 69 3c 6c 69 73 74 69 74 65 6d   i=0; i<listitem
10b0: 73 32 37 2e 6c 65 6e 67 74 68 3b 20 69 2b 2b 29  s27.length; i++)
10c0: 7b 0a 20 20 69 66 28 20 28 2b 2b 6a 29 3e 6e 52  {.  if( (++j)>nR
10d0: 6f 77 20 29 7b 0a 20 20 20 20 68 20 2b 3d 20 22  ow ){.    h += "
10e0: 3c 2f 75 6c 3e 3c 2f 74 64 3e 5c 6e 3c 74 64 3e  </ul></td>\n<td>
10f0: 3c 75 6c 20 63 6c 61 73 73 3d 27 6d 75 6c 74 69  <ul class='multi
1100: 63 6f 6c 5f 6c 69 73 74 27 3e 5c 6e 22 3b 0a 20  col_list'>\n";. 
1110: 20 20 20 6a 20 3d 20 31 3b 0a 20 20 7d 0a 20 20     j = 1;.  }.  
1120: 69 66 28 6c 69 73 74 69 74 65 6d 73 32 37 5b 69  if(listitems27[i
1130: 5d 2e 75 3d 3d 22 22 20 7c 7c 20 6c 69 73 74 69  ].u=="" || listi
1140: 74 65 6d 73 32 37 5b 69 5d 2e 73 3d 3d 32 29 7b  tems27[i].s==2){
1150: 0a 20 20 20 20 68 20 2b 3d 20 22 3c 6c 69 3e 22  .    h += "<li>"
1160: 0a 20 20 20 20 65 61 20 3d 20 22 22 0a 20 20 7d  .    ea = "".  }
1170: 65 6c 73 65 7b 0a 20 20 20 20 68 20 2b 3d 20 22  else{.    h += "
1180: 3c 6c 69 3e 3c 61 20 68 72 65 66 3d 27 22 3b 0a  <li><a href='";.
1190: 20 20 20 20 68 20 2b 3d 20 6c 69 73 74 69 74 65      h += listite
11a0: 6d 73 32 37 5b 69 5d 2e 75 3b 0a 20 20 20 20 68  ms27[i].u;.    h
11b0: 20 2b 3d 20 22 27 3e 22 3b 0a 20 20 20 20 65 61   += "'>";.    ea
11c0: 20 3d 20 22 3c 2f 61 3e 22 0a 20 20 7d 0a 20 20   = "</a>".  }.  
11d0: 69 66 28 6c 69 73 74 69 74 65 6d 73 32 37 5b 69  if(listitems27[i
11e0: 5d 2e 73 3d 3d 32 20 7c 7c 20 6c 69 73 74 69 74  ].s==2 || listit
11f0: 65 6d 73 32 37 5b 69 5d 2e 73 3d 3d 33 29 20 68  ems27[i].s==3) h
1200: 20 2b 3d 20 22 3c 73 3e 22 0a 20 20 68 20 2b 3d   += "<s>".  h +=
1210: 20 6c 69 73 74 69 74 65 6d 73 32 37 5b 69 5d 2e   listitems27[i].
1220: 78 3b 0a 20 20 69 66 28 6c 69 73 74 69 74 65 6d  x;.  if(listitem
1230: 73 32 37 5b 69 5d 2e 73 3d 3d 32 20 7c 7c 20 6c  s27[i].s==2 || l
1240: 69 73 74 69 74 65 6d 73 32 37 5b 69 5d 2e 73 3d  istitems27[i].s=
1250: 3d 33 29 20 68 20 2b 3d 20 22 3c 2f 73 3e 22 0a  =3) h += "</s>".
1260: 20 20 68 20 2b 3d 20 65 61 0a 20 20 69 66 28 6c    h += ea.  if(l
1270: 69 73 74 69 74 65 6d 73 32 37 5b 69 5d 2e 73 3d  istitems27[i].s=
1280: 3d 31 29 20 68 20 2b 3d 20 22 3c 73 6d 61 6c 6c  =1) h += "<small
1290: 3e 3c 69 3e 28 65 78 70 29 3c 2f 69 3e 3c 2f 73  ><i>(exp)</i></s
12a0: 6d 61 6c 6c 3e 5c 6e 22 3b 0a 20 20 69 66 28 6c  mall>\n";.  if(l
12b0: 69 73 74 69 74 65 6d 73 32 37 5b 69 5d 2e 73 3d  istitems27[i].s=
12c0: 3d 33 29 20 68 20 2b 3d 20 22 26 73 75 70 31 5c  =3) h += "&sup1\
12d0: 6e 22 3b 0a 20 20 69 66 28 6c 69 73 74 69 74 65  n";.  if(listite
12e0: 6d 73 32 37 5b 69 5d 2e 73 3d 3d 34 29 20 68 20  ms27[i].s==4) h 
12f0: 2b 3d 20 22 26 73 75 70 32 5c 6e 22 3b 0a 20 20  += "&sup2\n";.  
1300: 69 66 28 6c 69 73 74 69 74 65 6d 73 32 37 5b 69  if(listitems27[i
1310: 5d 2e 73 3d 3d 35 29 20 68 20 2b 3d 20 22 26 73  ].s==5) h += "&s
1320: 75 70 33 5c 6e 22 3b 0a 7d 0a 64 6f 63 75 6d 65  up3\n";.}.docume
1330: 6e 74 2e 67 65 74 45 6c 65 6d 65 6e 74 42 79 49  nt.getElementByI
1340: 64 28 22 6c 69 73 74 74 61 62 32 37 22 29 2e 69  d("listtab27").i
1350: 6e 6e 65 72 48 54 4d 4c 20 3d 20 68 3b 0a 3c 2f  nnerHTML = h;.</
1360: 73 63 72 69 70 74 3e 0a 3c 68 72 20 63 6c 61 73  script>.<hr clas
1370: 73 3d 27 78 68 72 27 3e 0a 3c 64 6c 3e 0a 3c 61  s='xhr'>.<dl>.<a
1380: 20 6e 61 6d 65 3d 22 61 76 67 22 3e 3c 2f 61 3e   name="avg"></a>
1390: 0a 3c 64 74 3e 3c 70 3e 3c 62 3e 61 76 67 28 3c  .<dt><p><b>avg(<
13a0: 69 3e 58 3c 2f 69 3e 29 3c 2f 62 3e 3c 2f 64 74  i>X</i>)</b></dt
13b0: 3e 3c 64 64 3e 3c 70 3e 0a 20 20 54 68 65 20 61  ><dd><p>.  The a
13c0: 76 67 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20  vg() function.  
13d0: 72 65 74 75 72 6e 73 20 74 68 65 20 61 76 65 72  returns the aver
13e0: 61 67 65 20 76 61 6c 75 65 20 6f 66 20 61 6c 6c  age value of all
13f0: 20 6e 6f 6e 2d 4e 55 4c 4c 20 3c 69 3e 58 3c 2f   non-NULL <i>X</
1400: 69 3e 20 77 69 74 68 69 6e 20 61 0a 20 20 67 72  i> within a.  gr
1410: 6f 75 70 2e 20 20 53 74 72 69 6e 67 20 61 6e 64  oup.  String and
1420: 20 42 4c 4f 42 20 76 61 6c 75 65 73 20 74 68 61   BLOB values tha
1430: 74 20 64 6f 20 6e 6f 74 20 6c 6f 6f 6b 20 6c 69  t do not look li
1440: 6b 65 20 6e 75 6d 62 65 72 73 20 61 72 65 0a 20  ke numbers are. 
1450: 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20   interpreted as 
1460: 30 2e 0a 20 20 54 68 65 20 72 65 73 75 6c 74 20  0..  The result 
1470: 6f 66 20 61 76 67 28 29 20 69 73 20 61 6c 77 61  of avg() is alwa
1480: 79 73 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f  ys a floating po
1490: 69 6e 74 20 76 61 6c 75 65 20 61 73 20 6c 6f 6e  int value as lon
14a0: 67 20 61 73 0a 20 20 61 74 20 74 68 65 72 65 20  g as.  at there 
14b0: 69 73 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 20  is at least one 
14c0: 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74 20 65  non-NULL input e
14d0: 76 65 6e 20 69 66 20 61 6c 6c 0a 20 20 69 6e 70  ven if all.  inp
14e0: 75 74 73 20 61 72 65 20 69 6e 74 65 67 65 72 73  uts are integers
14f0: 2e 20 20 54 68 65 20 72 65 73 75 6c 74 20 6f 66  .  The result of
1500: 20 61 76 67 28 29 20 69 73 20 4e 55 4c 4c 20 69   avg() is NULL i
1510: 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 0a 20 20  f and only if.  
1520: 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6e 6f 6e  there are no non
1530: 2d 4e 55 4c 4c 20 69 6e 70 75 74 73 2e 20 20 0a  -NULL inputs.  .
1540: 3c 2f 64 64 3e 0a 3c 61 20 6e 61 6d 65 3d 22 63  </dd>.<a name="c
1550: 6f 75 6e 74 22 3e 3c 2f 61 3e 0a 3c 64 74 3e 3c  ount"></a>.<dt><
1560: 70 3e 3c 62 3e 63 6f 75 6e 74 28 3c 69 3e 58 3c  p><b>count(<i>X<
1570: 2f 69 3e 29 3c 62 72 20 2f 3e 63 6f 75 6e 74 28  /i>)<br />count(
1580: 2a 29 3c 2f 62 3e 3c 2f 64 74 3e 3c 64 64 3e 3c  *)</b></dt><dd><
1590: 70 3e 0a 20 20 54 68 65 20 63 6f 75 6e 74 28 58  p>.  The count(X
15a0: 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
15b0: 6e 73 0a 20 20 61 20 63 6f 75 6e 74 20 6f 66 20  ns.  a count of 
15c0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 69  the number of ti
15d0: 6d 65 73 0a 20 20 74 68 61 74 20 3c 69 3e 58 3c  mes.  that <i>X<
15e0: 2f 69 3e 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20  /i> is not NULL 
15f0: 69 6e 20 61 20 67 72 6f 75 70 2e 20 20 54 68 65  in a group.  The
1600: 20 63 6f 75 6e 74 28 2a 29 20 66 75 6e 63 74 69   count(*) functi
1610: 6f 6e 0a 20 20 28 77 69 74 68 20 6e 6f 20 61 72  on.  (with no ar
1620: 67 75 6d 65 6e 74 73 29 20 72 65 74 75 72 6e 73  guments) returns
1630: 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65   the total numbe
1640: 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65  r of rows in the
1650: 20 67 72 6f 75 70 2e 0a 3c 2f 64 64 3e 0a 3c 61   group..</dd>.<a
1660: 20 6e 61 6d 65 3d 22 67 72 6f 75 70 63 6f 6e 63   name="groupconc
1670: 61 74 22 3e 3c 2f 61 3e 0a 3c 64 74 3e 3c 70 3e  at"></a>.<dt><p>
1680: 3c 62 3e 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28  <b>group_concat(
1690: 3c 69 3e 58 3c 2f 69 3e 29 3c 62 72 20 2f 3e 67  <i>X</i>)<br />g
16a0: 72 6f 75 70 5f 63 6f 6e 63 61 74 28 3c 69 3e 58  roup_concat(<i>X
16b0: 3c 2f 69 3e 2c 3c 69 3e 59 3c 2f 69 3e 29 3c 2f  </i>,<i>Y</i>)</
16c0: 62 3e 3c 2f 64 74 3e 3c 64 64 3e 3c 70 3e 0a 20  b></dt><dd><p>. 
16d0: 20 54 68 65 20 67 72 6f 75 70 5f 63 6f 6e 63 61   The group_conca
16e0: 74 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  t() function ret
16f0: 75 72 6e 73 0a 20 20 61 20 73 74 72 69 6e 67 20  urns.  a string 
1700: 77 68 69 63 68 20 69 73 20 74 68 65 20 63 6f 6e  which is the con
1710: 63 61 74 65 6e 61 74 69 6f 6e 20 6f 66 0a 20 20  catenation of.  
1720: 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c  all non-NULL val
1730: 75 65 73 20 6f 66 20 3c 69 3e 58 3c 2f 69 3e 2e  ues of <i>X</i>.
1740: 20 20 49 66 20 70 61 72 61 6d 65 74 65 72 20 3c    If parameter <
1750: 69 3e 59 3c 2f 69 3e 20 69 73 20 70 72 65 73 65  i>Y</i> is prese
1760: 6e 74 20 74 68 65 6e 0a 20 20 69 74 20 69 73 20  nt then.  it is 
1770: 75 73 65 64 20 61 73 20 74 68 65 20 73 65 70 61  used as the sepa
1780: 72 61 74 6f 72 0a 20 20 62 65 74 77 65 65 6e 20  rator.  between 
1790: 69 6e 73 74 61 6e 63 65 73 20 6f 66 20 3c 69 3e  instances of <i>
17a0: 58 3c 2f 69 3e 2e 20 20 41 20 63 6f 6d 6d 61 20  X</i>.  A comma 
17b0: 28 22 2c 22 29 20 69 73 20 75 73 65 64 20 61 73  (",") is used as
17c0: 20 74 68 65 20 73 65 70 61 72 61 74 6f 72 0a 20   the separator. 
17d0: 20 69 66 20 3c 69 3e 59 3c 2f 69 3e 20 69 73 20   if <i>Y</i> is 
17e0: 6f 6d 69 74 74 65 64 2e 20 20 54 68 65 20 6f 72  omitted.  The or
17f0: 64 65 72 20 6f 66 20 74 68 65 20 63 6f 6e 63 61  der of the conca
1800: 74 65 6e 61 74 65 64 20 65 6c 65 6d 65 6e 74 73  tenated elements
1810: 20 69 73 0a 20 20 61 72 62 69 74 72 61 72 79 2e   is.  arbitrary.
1820: 0a 3c 2f 64 64 3e 0a 3c 61 20 6e 61 6d 65 3d 22  .</dd>.<a name="
1830: 6d 61 78 67 67 75 6e 63 22 3e 3c 2f 61 3e 0a 3c  maxggunc"></a>.<
1840: 64 74 3e 3c 70 3e 3c 62 3e 6d 61 78 28 3c 69 3e  dt><p><b>max(<i>
1850: 58 3c 2f 69 3e 29 3c 2f 62 3e 3c 2f 64 74 3e 3c  X</i>)</b></dt><
1860: 64 64 3e 3c 70 3e 0a 20 20 54 68 65 20 6d 61 78  dd><p>.  The max
1870: 28 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  () aggregate fun
1880: 63 74 69 6f 6e 0a 20 20 72 65 74 75 72 6e 73 20  ction.  returns 
1890: 74 68 65 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75  the maximum valu
18a0: 65 20 6f 66 20 61 6c 6c 20 76 61 6c 75 65 73 20  e of all values 
18b0: 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 20 20  in the group..  
18c0: 54 68 65 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75  The maximum valu
18d0: 65 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 74  e is the value t
18e0: 68 61 74 20 77 6f 75 6c 64 20 62 65 20 72 65 74  hat would be ret
18f0: 75 72 6e 65 64 20 6c 61 73 74 20 69 6e 20 61 6e  urned last in an
1900: 0a 20 20 4f 52 44 45 52 20 42 59 20 6f 6e 20 74  .  ORDER BY on t
1910: 68 65 20 73 61 6d 65 20 63 6f 6c 75 6d 6e 2e 20  he same column. 
1920: 20 41 67 67 72 65 67 61 74 65 20 6d 61 78 28 29   Aggregate max()
1930: 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 20 0a 20   returns NULL . 
1940: 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20   if and only if 
1950: 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6e 6f 6e  there are no non
1960: 2d 4e 55 4c 4c 20 76 61 6c 75 65 73 20 69 6e 20  -NULL values in 
1970: 74 68 65 20 67 72 6f 75 70 2e 0a 3c 2f 64 64 3e  the group..</dd>
1980: 0a 3c 61 20 6e 61 6d 65 3d 22 6d 69 6e 67 67 75  .<a name="minggu
1990: 6e 63 22 3e 3c 2f 61 3e 0a 3c 64 74 3e 3c 70 3e  nc"></a>.<dt><p>
19a0: 3c 62 3e 6d 69 6e 28 3c 69 3e 58 3c 2f 69 3e 29  <b>min(<i>X</i>)
19b0: 3c 2f 62 3e 3c 2f 64 74 3e 3c 64 64 3e 3c 70 3e  </b></dt><dd><p>
19c0: 0a 20 20 54 68 65 20 6d 69 6e 28 29 20 61 67 67  .  The min() agg
19d0: 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 0a  regate function.
19e0: 20 20 72 65 74 75 72 6e 73 20 74 68 65 20 6d 69    returns the mi
19f0: 6e 69 6d 75 6d 20 6e 6f 6e 2d 4e 55 4c 4c 20 76  nimum non-NULL v
1a00: 61 6c 75 65 20 6f 66 20 61 6c 6c 20 76 61 6c 75  alue of all valu
1a10: 65 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e  es in the group.
1a20: 0a 20 20 54 68 65 20 6d 69 6e 69 6d 75 6d 20 76  .  The minimum v
1a30: 61 6c 75 65 20 69 73 20 74 68 65 20 66 69 72 73  alue is the firs
1a40: 74 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65  t non-NULL value
1a50: 20 74 68 61 74 20 77 6f 75 6c 64 20 61 70 70 65   that would appe
1a60: 61 72 0a 20 20 69 6e 20 61 6e 20 4f 52 44 45 52  ar.  in an ORDER
1a70: 20 42 59 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d   BY of the colum
1a80: 6e 2e 0a 20 20 41 67 67 72 65 67 61 74 65 20 6d  n..  Aggregate m
1a90: 69 6e 28 29 20 72 65 74 75 72 6e 73 20 4e 55 4c  in() returns NUL
1aa0: 4c 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66  L if and only if
1ab0: 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6e 6f   there are no no
1ac0: 6e 2d 4e 55 4c 4c 0a 20 20 76 61 6c 75 65 73 20  n-NULL.  values 
1ad0: 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 3c 2f  in the group..</
1ae0: 64 64 3e 0a 3c 61 20 6e 61 6d 65 3d 22 73 75 6d  dd>.<a name="sum
1af0: 75 6e 63 22 3e 3c 2f 61 3e 0a 3c 64 74 3e 3c 70  unc"></a>.<dt><p
1b00: 3e 3c 62 3e 73 75 6d 28 3c 69 3e 58 3c 2f 69 3e  ><b>sum(<i>X</i>
1b10: 29 3c 62 72 20 2f 3e 74 6f 74 61 6c 28 3c 69 3e  )<br />total(<i>
1b20: 58 3c 2f 69 3e 29 3c 2f 62 3e 3c 2f 64 74 3e 3c  X</i>)</b></dt><
1b30: 64 64 3e 3c 70 3e 0a 20 20 54 68 65 20 73 75 6d  dd><p>.  The sum
1b40: 28 29 20 61 6e 64 20 74 6f 74 61 6c 28 29 20 61  () and total() a
1b50: 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
1b60: 6e 73 0a 20 20 72 65 74 75 72 6e 20 73 75 6d 20  ns.  return sum 
1b70: 6f 66 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20  of all non-NULL 
1b80: 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72  values in the gr
1b90: 6f 75 70 2e 0a 20 20 49 66 20 74 68 65 72 65 20  oup..  If there 
1ba0: 61 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20  are no non-NULL 
1bb0: 69 6e 70 75 74 20 72 6f 77 73 20 74 68 65 6e 20  input rows then 
1bc0: 73 75 6d 28 29 20 72 65 74 75 72 6e 73 0a 20 20  sum() returns.  
1bd0: 4e 55 4c 4c 20 62 75 74 20 74 6f 74 61 6c 28 29  NULL but total()
1be0: 20 72 65 74 75 72 6e 73 20 30 2e 30 2e 0a 20 20   returns 0.0..  
1bf0: 4e 55 4c 4c 20 69 73 20 6e 6f 74 20 6e 6f 72 6d  NULL is not norm
1c00: 61 6c 6c 79 20 61 20 68 65 6c 70 66 75 6c 20 72  ally a helpful r
1c10: 65 73 75 6c 74 20 66 6f 72 20 74 68 65 20 73 75  esult for the su
1c20: 6d 20 6f 66 20 6e 6f 20 72 6f 77 73 0a 20 20 62  m of no rows.  b
1c30: 75 74 20 74 68 65 20 53 51 4c 20 73 74 61 6e 64  ut the SQL stand
1c40: 61 72 64 20 72 65 71 75 69 72 65 73 20 69 74 20  ard requires it 
1c50: 61 6e 64 20 6d 6f 73 74 20 6f 74 68 65 72 0a 20  and most other. 
1c60: 20 53 51 4c 20 64 61 74 61 62 61 73 65 20 65 6e   SQL database en
1c70: 67 69 6e 65 73 20 69 6d 70 6c 65 6d 65 6e 74 20  gines implement 
1c80: 73 75 6d 28 29 20 74 68 61 74 20 77 61 79 20 73  sum() that way s
1c90: 6f 20 53 51 4c 69 74 65 20 64 6f 65 73 20 69 74  o SQLite does it
1ca0: 20 69 6e 20 74 68 65 0a 20 20 73 61 6d 65 20 77   in the.  same w
1cb0: 61 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 62  ay in order to b
1cc0: 65 20 63 6f 6d 70 61 74 69 62 6c 65 2e 20 20 20  e compatible.   
1cd0: 54 68 65 20 6e 6f 6e 2d 73 74 61 6e 64 61 72 64  The non-standard
1ce0: 20 74 6f 74 61 6c 28 29 20 66 75 6e 63 74 69 6f   total() functio
1cf0: 6e 0a 20 20 69 73 20 70 72 6f 76 69 64 65 64 20  n.  is provided 
1d00: 61 73 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20  as a convenient 
1d10: 77 61 79 20 74 6f 20 77 6f 72 6b 20 61 72 6f 75  way to work arou
1d20: 6e 64 20 74 68 69 73 20 64 65 73 69 67 6e 20 70  nd this design p
1d30: 72 6f 62 6c 65 6d 0a 20 20 69 6e 20 74 68 65 20  roblem.  in the 
1d40: 53 51 4c 20 6c 61 6e 67 75 61 67 65 2e 3c 2f 70  SQL language.</p
1d50: 3e 0a 0a 20 20 3c 70 3e 54 68 65 20 72 65 73 75  >..  <p>The resu
1d60: 6c 74 20 6f 66 20 74 6f 74 61 6c 28 29 20 69 73  lt of total() is
1d70: 20 61 6c 77 61 79 73 20 61 20 66 6c 6f 61 74 69   always a floati
1d80: 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a  ng point value..
1d90: 20 20 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20    The result of 
1da0: 73 75 6d 28 29 20 69 73 20 61 6e 20 69 6e 74 65  sum() is an inte
1db0: 67 65 72 20 76 61 6c 75 65 20 69 66 20 61 6c 6c  ger value if all
1dc0: 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74 73   non-NULL inputs
1dd0: 20 61 72 65 20 69 6e 74 65 67 65 72 73 2e 0a 20   are integers.. 
1de0: 20 49 66 20 61 6e 79 20 69 6e 70 75 74 20 74 6f   If any input to
1df0: 20 73 75 6d 28 29 20 69 73 20 6e 65 69 74 68 65   sum() is neithe
1e00: 72 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 72 20  r an integer or 
1e10: 61 20 4e 55 4c 4c 0a 20 20 74 68 65 6e 20 73 75  a NULL.  then su
1e20: 6d 28 29 20 72 65 74 75 72 6e 73 20 61 20 66 6c  m() returns a fl
1e30: 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c  oating point val
1e40: 75 65 0a 20 20 77 68 69 63 68 20 6d 69 67 68 74  ue.  which might
1e50: 20 62 65 20 61 6e 20 61 70 70 72 6f 78 69 6d 61   be an approxima
1e60: 74 69 6f 6e 20 74 6f 20 74 68 65 20 74 72 75 65  tion to the true
1e70: 20 73 75 6d 2e 3c 2f 70 3e 0a 0a 20 20 3c 70 3e   sum.</p>..  <p>
1e80: 53 75 6d 28 29 20 77 69 6c 6c 20 74 68 72 6f 77  Sum() will throw
1e90: 20 61 6e 20 22 69 6e 74 65 67 65 72 20 6f 76 65   an "integer ove
1ea0: 72 66 6c 6f 77 22 20 65 78 63 65 70 74 69 6f 6e  rflow" exception
1eb0: 20 69 66 20 61 6c 6c 20 69 6e 70 75 74 73 0a 20   if all inputs. 
1ec0: 20 61 72 65 20 69 6e 74 65 67 65 72 73 20 6f 72   are integers or
1ed0: 20 4e 55 4c 4c 0a 20 20 61 6e 64 20 61 6e 20 69   NULL.  and an i
1ee0: 6e 74 65 67 65 72 20 6f 76 65 72 66 6c 6f 77 20  nteger overflow 
1ef0: 6f 63 63 75 72 73 20 61 74 20 61 6e 79 20 70 6f  occurs at any po
1f00: 69 6e 74 20 64 75 72 69 6e 67 20 74 68 65 20 63  int during the c
1f10: 6f 6d 70 75 74 61 74 69 6f 6e 2e 0a 20 20 54 6f  omputation..  To
1f20: 74 61 6c 28 29 20 6e 65 76 65 72 20 74 68 72 6f  tal() never thro
1f30: 77 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 76  ws an integer ov
1f40: 65 72 66 6c 6f 77 2e 0a 3c 2f 64 64 3e 0a 3c 2f  erflow..</dd>.</
1f50: 64 6c 3e 0a 0a                                   dl>..