《SQL 21日自学通(V3.0)(PDF格式)》第41章


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 
小说推荐
返回首页返回目录