17 Joans Gas 25。1 Gas 9 Abes Cleaners 24。35 X…Tra Starch 20 Abes Cleaners 10。5 All Dry Clean 8 Cash 60 Trip to Boston 21 Cash 34 Trip to Dayton 30 Local Utilities 87。5 Water 31 Local Utilities 34 Sewer 25 Joans Gas 15。75 Gas 你会输入如下语句 INPUT/OUTPUT SELECT SUM AMOUNT FROM CHECKS SUM 1159。87 分析 这条语句返回了对 AMOUNT 列的合计结果 可是如果你想知道的是对每一个 PAYEE 花了多少钱时又该怎么办呢 使用 GROUP BY 语句可以帮助你 对本例它的使用方法如 下 INPUT/OUTPUT SELECT PAYEE SUM AMOUNT FROM CHECKS GROUP BY PAYEE PAYEE SUM EMAIL wyhsillypig@163。 106 …………………………………………………………Page 107…………………………………………………………… SQL 21 日自学通(V1。0) 翻译人 笨猪 Abes Cleaners 34。849998 Cash 119 Joans Gas 40。849998 Joes Stale Dent 150 Local Utilities 219。5 Ma Bell 350。33002 Reading R。R 。245。34 SELECT 子句有一个正常的列 之后是一个汇总函数 如果它的后边只有 FROM CHECKS 子句的话 那么你将会看到 INPUT/OUTPUT SELECT PAYEE SUM AMOUNT FROM CHECKS Dynamic SQL Error …SQL error code = …104 …invalid column reference 分析 该信息表明 SQL 无法把正常的列和汇总函数结合在一起 这时就需要 GROUP BY 子 句 它可以对 SELECT 的结果进行分组后在应用汇总函数 查询 SELECT * FROM CHECKS 返回了 14 行 而 SELECT PAYEE SUM AMOUNT FROM CHECKS GROUP BY PAYEE 则把返回的 14 行分成了 7 组 然后对每组应用了汇总函数 INPUT/OUTPUT SELECT PAYEE SUM AMOUNT COUNT PAYEE FROM CHECKS GROUP BY PAYEE PAYEE SUM COUNT Abes Cleaners 34。849998 2 Cash 119 3 Joans Gas 40。849998 2 Joes Stale Dent 150 1 Local Utilities 219。5 3 Ma Bell 350。33002 2 Reading R。R 。245。34 1 分析 SQL 现在越来越变得有用了 在上一个例子中 我们只是应用 GROUP BY 对数据结 果进行了唯一的分组 注意结果是按 PAYEE 排序的 GROUP BY 也可以像 ORDER BY 那 EMAIL wyhsillypig@163。 107 …………………………………………………………Page 108…………………………………………………………… SQL 21 日自学通(V1。0) 翻译人 笨猪 样工作 如果我们对多个列进行分组会有什么结果呢 请看 INPUT/OUTPUT SELECT PAYEE SUM AMOUNT COUNT PAYEE FROM CHECKS GROUP BY PAYEE REMARKS PAYEE SUM COUNT Abes Cleaners 10。5 1 Abes Cleaners 24。35 1 Cash 60 1 Cash 34 1 Cash 25 1 Joans Gas 40。849998 2 Joes Stale Dent 150 1 Local Utilities 98 1 Local Utilities 34 1 Local Utilities 87。5 1 Ma Bell 200。33 1 Ma Bell 150 1 Reading R。R 。245。34 1 分析 输出结果由原来的将 14 行分成 7 组变成了 13 组 为什么它会多出了这么多组呢 我 们来看一下 INPUT/OUTPUT SELECT PAYEE REMARKS FROM CHECKS WHERE PAYEE Joans Gas PAYEE REMARKS Joans Gas Gas Joans Gas Gas 分析 你可以看到这两个记录的内容是完全一样的 所以在运行 GROUP BY 以后把它们合并 成了一个记录 而其它行则是唯一的 所以合并以后仍然是唯一的 下例是对 REMARKS 进行分组并找出组中的最大值和最小值 INPUT/OUTPUT SELECT MIN AMOUNT MAX AMOUNT FROM CHECKS GROUP BY REMARKS EMAIL wyhsillypig@163。 108 …………………………………………………………Page 109…………………………………………………………… SQL 21 日自学通(V1。0) 翻译人 笨猪 MIN MAX 245。34 245。34 10。5 10。5 200。33 200。33 15。75 98 150 150 150 150 34 34