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


DONKNOW 3B 175 65 23 50 10 1 4 15 
WORLEY LF 157 49 15 35 8 3 3 16 
DAVID OF 187 70 24 48 4 0 17 42 
HAMHOCKER 3B 50 12 10 10 2 0 0 13 
EMAIL wyhsillypig@163。 62 
…………………………………………………………Page 63……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪 
CASEY DH 1 0 0 0 0 0 0 1 
COUNT 
该函数将返回满足 WHERE 条件子句中记录的个数 例如你想知道都有哪一个球员的 
击球数小于 350 可以这样做 
输入/输出 
SQL》 SELECT COUNT( ) FROM TEAMSTATS WHERE HITS/AB 。35 
COUNT( ) 
4 
为了使这段代码更易读 可以使用别名 
输入/输出 
SQL》SELECT COUNT( ) NUM_BELOW_350 FROM TEAMSTATS 
WHERE HITS/AB 。35 
NUM_BELOW_350 
4 
如果我们用列名来替换掉括号中的星号时会结果与原来有什么不同呢 试一下 
SQL》 SELECT COUNT(NAME) NUM_BELOW_350 FROM TEAMSTATS 
WHERE HITS/AB 。35 
NUM_BELOW_350 
4 
结果是一样的 因为你所选择的NAME 列与 WHERE 子句并不相关 如果你在使用 count 
时无 WHERE 子句 那么它将会返回表中的所有记录的个数 
输入/输出 
SQL》 SELECT COUNT( ) FROM TEAMSTATS 
COUNT( ) 
6 
SUM 
SUM 就如同它的本意一样 它返回某一列的所有数值的和 如果想知道队员总打点的 
总和是多少 试一下 
EMAIL wyhsillypig@163。 63 
…………………………………………………………Page 64……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪 
输入 
SQL》SELECT SUM(SINGLES) TOTAL_SINGLES FROM TEAMSTATS 
输出 
TOTAL_SINGLES 
174 
如果想得到多个列的和 可按如下所做 
输入/输出 
SQL》 SELECT SUM(SINGLES) TOTAL_SINGLES SUM(DOUBLES) 
TOTAL_DOUBLES SUM(TRIPLES) TOTAL_TRIPLES SUM(HR) TOTAL_HR 
FROM TEAMSTATS 
TOTAL_SINGLES TOTAL_DOUBLES TOTAL_TRIPLES TOTAL_HR 
174 32 5 29 
类似地 如果想找一下所有的点数在 300 包括 300 以上的的队员 则语句如下 
输入/输出 
SQL》SELECT SUM(SINGLES) TOTAL_SINGLES SUM(DOUBLES) TOTAL_DOUBLES 
SUM(TRIPLES) TOTAL_TRIPLES SUM(HR) TOTAL_HR FROM TEAMSTATS 
WHERE HITS/AB 》=。300 
TOTAL_SINGLES TOTAL_DOUBLES TOTAL_TRIPLES TOTAL_HR 
164 30 5 29 
想估计一下一个球队的平均中球率 
输入/输出 
SQL》SELECT SUM(HITS)/SUM(AB) TEAM_AVERAGE FROM TEAMSTATS 
TEAM_AVERAGE 
。33706294 
SUM 只能处理数字 如果它的处理目标不是数字 你将会收到如下信息 
输入/输出 
SQL》SELECT SUM(NAME) FROM TEAMSTATS; 
ERROR 
ORA…01722 invalid number 
no rows selected 
该错误信息当然的合理的 因为NAME 字段是无法进行汇总的 
EMAIL wyhsillypig@163。 64 
…………………………………………………………Page 65……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪 
AVG 
AVG 可以返回某一列的平均值 如果你想知道漏球的平均数请看下例 
输入 
SQL》SELECT AVG(SO) AVE_STRIKE_OUTS FROM TEAMSTATS 
输出 
AVE_STRIKE_OUTS 
16。166667 
下边的例子反映了 SUM 与 AVG 的不同之处 
输入/输出 
SQL》SELECT AVG(HITS/AB) TEAM_AVERAGE FROM TEAMSTATS 
TEAM_AVERAGE 
。26803448 
分析 
可是在上一个例子中的打中率是。3370629 这是怎么回事呢 AVG 计算的是打中的次 
数与总打击次数商的平均值 然而在上一个例子中是对打中次数和打击次数分别求和后在 
进行相除的 举例来说 A 队员打了 100 杆 中了 50 次 那么他的平均值是 0。5 B 队员 
打了 1 杆 没打中 他的平均值是 0。0 而 0。0 与 0。5 的平均值是 0。25 如果你按打 101 杆 
中 50 杆计算 那么结果就会是正确的了 下边的例子将会返回正确的击中率 
输入/输出 
SQL》SELECT AVG(HITS)/AVG(AB) TEAM_AVERAGE FROM TEAMSTATS 
TEAM_AVERAGE 
。33706294 
与 SUM 函数一样 AVG 函数也只能对数字进行计算 
MAX 
如果你想知道某一列中的最大值 请使用 MAX 例如 你想知道谁的打点最高 
输入 
SQL》SELECT MAX(HITS) FROM TEAMSTATS 
EMAIL wyhsillypig@163。 65 
…………………………………………………………Page 66……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪 
输出 
MAX(HITS) 
70 
你能从这里知道是谁打的最多吗 
输入/输出 
SQL》SELECT NAME FROM TEAMSTATS WHERE HITS=MAX HITS 
ERROR at line 3 
ORA…00934 group function is not allowed here 
很不幸 你不能 这一信息提示你汇总函数无法在 WHERE 子句中使用 但是请别灰 
心 在第 7 天的 子查询 深入 SELECT 语句 将引入子查询的概念并会给出知道谁是打 
点最多人解决方案 
如果把它用的非数字场合会有什么情况出现呢 
输入/输出 
SQL》SELECT MAX(NAME) FROM TEAMSTATS 
MAX(NAME) 
WORLEY 
这是一个新现象 MAX 返回了最高的字符串 最大的是 z 所以说 MAX 既可以处 
理数值也可以处理字符 
MIN 
MIN 与 MAX 类似 它返回一列中的最小数值 例如 你想知道打杆的最小值是多少 
输入 
SQL》SELECT MIN AB FROM TEAMSTATS 
输出 
MIN(AB) 
小说推荐
返回首页返回目录