1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML
><HEAD
><TITLE
>Using Aggregate Functions</TITLE
><META
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet version 1.19"><LINK
REL="HOME"
TITLE="PostgreSQL User's Guide"
HREF="user.html"><LINK
REL="UP"
TITLE="The Query Language"
HREF="query-ug.html"><LINK
REL="PREVIOUS"
TITLE="Deletions"
HREF="query-ug2939.html"><LINK
REL="NEXT"
TITLE="Disk Storage"
HREF="storage.html"></HEAD
><BODY
BGCOLOR="#FFFFFF"
TEXT="#000000"
><DIV
CLASS="NAVHEADER"
><TABLE
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TH
COLSPAN="3"
ALIGN="center"
>PostgreSQL User's Guide</TH
></TR
><TR
><TD
WIDTH="10%"
ALIGN="left"
VALIGN="bottom"
><A
HREF="query-ug2939.html"
>Prev</A
></TD
><TD
WIDTH="80%"
ALIGN="center"
VALIGN="bottom"
>Chapter 12. The Query Language</TD
><TD
WIDTH="10%"
ALIGN="right"
VALIGN="bottom"
><A
HREF="storage.html"
>Next</A
></TD
></TR
></TABLE
><HR
ALIGN="LEFT"
WIDTH="100%"></DIV
><H1
CLASS="SECT1"
><A
NAME="AEN2946"
>Using Aggregate Functions</A
></H1
><P
> Like most other query languages, <SPAN
CLASS="PRODUCTNAME"
>PostgreSQL</SPAN
> supports
aggregate functions.
The current implementation of <SPAN
CLASS="PRODUCTNAME"
>Postgres</SPAN
> aggregate functions have some limitations.
Specifically, while there are aggregates to compute
such functions as the <TT
CLASS="FUNCTION"
>count</TT
>, <TT
CLASS="FUNCTION"
>sum</TT
>,
<TT
CLASS="FUNCTION"
>avg</TT
> (average), <TT
CLASS="FUNCTION"
>max</TT
> (maximum) and
<TT
CLASS="FUNCTION"
>min</TT
> (minimum) over a set of instances, aggregates can only
appear in the target list of a query and not directly in the
qualification (the <I
CLASS="FIRSTTERM"
>where</I
> clause). As an example,
<PRE
CLASS="PROGRAMLISTING"
>SELECT max(temp_lo) FROM weather;</PRE
>
is allowed, while
<PRE
CLASS="PROGRAMLISTING"
>SELECT city FROM weather WHERE temp_lo = max(temp_lo);</PRE
>
is not. However, as is often the case the query can be restated to accomplish
the intended result; here by using a <I
CLASS="FIRSTTERM"
>subselect</I
>:
<PRE
CLASS="PROGRAMLISTING"
>SELECT city FROM weather WHERE temp_lo = (SELECT max(temp_lo) FROM weather);</PRE
></P
><P
> Aggregates may also have <I
CLASS="FIRSTTERM"
>group by</I
> clauses:
<PRE
CLASS="PROGRAMLISTING"
>SELECT city, max(temp_lo)
FROM weather
GROUP BY city;</PRE
></P
><DIV
CLASS="NAVFOOTER"
><HR
ALIGN="LEFT"
WIDTH="100%"><TABLE
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
><A
HREF="query-ug2939.html"
>Prev</A
></TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="user.html"
>Home</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
><A
HREF="storage.html"
>Next</A
></TD
></TR
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
>Deletions</TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="query-ug.html"
>Up</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>Disk Storage</TD
></TR
></TABLE
></DIV
></BODY
></HTML
>
|