八宝书库 > 文学其他电子书 > SQL 21日自学通(V3.0)(PDF格式) >

第18部分

SQL 21日自学通(V3.0)(PDF格式)-第18部分

小说: SQL 21日自学通(V3.0)(PDF格式) 字数: 每页4000字

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!






           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) 



           1 



   下列语句将返回名字在字母表中排在最前边的 



   输入/输出 



   SQL》SELECT  MIN(NAME)  FROM   TEAMSTATS 



EMAIL wyhsillypig@163。                                         66 


…………………………………………………………Page 67……………………………………………………………

SQL 21  日自学通(V1。0)                                         翻译人   笨猪 



        MIN(NAME) 



        CASEY 



   你可以同时使用 MAX 和 MIN 函数以获得数值的界限  例如 



   输入/输出 



    SQL》SELECT  MIN  AB   MAX  AB    FROM   TEAMSTATS 



          MIN(AB)   MAX(AB) 



          1         187 



   对于统计函数来说这一信息有时非常有用 



   注   我们在今天开始曾说过         这五个函数是由 ANSI      标准所定义的  其余的函数也已 



经成为了事实上的标准  你可以在所有的 SQL 解释器中找到它们                   这里   我们使用的它们 



在 ORACLE7  中的名字  在其它的解释器中它们的名称可能与这里提到的不同 



VARIANCE 



   VARIANCE   方差   不是标准中所定义的        但它却是统计领域中的一个至关重要的数 



值  使用方法如下 



   输入 



    SQL》SELECT  VARIANCE  HITS FROM   TEAMSTATS 



   输出 



           VARIANCE(HITS) 



           802。96667 



    如果我们在将它应用于字符串 



   输入/输出 



    SQL》SELECT  VARIANCE  NAME   FROM  TEAMSTATS 



   ERROR 



   ORA…01722  invalid number 



   No  rows selected 



   可见  VARIANCE 也是一个只应用于数值对象的函数 



EMAIL wyhsillypig@163。                                         67 


…………………………………………………………Page 68……………………………………………………………

SQL 21  日自学通(V1。0)                                          翻译人   笨猪 



STDDEV 



    这是最后一个统计函数         STDDEV 返回某一列数值的标准差  它的应用示例如下 



    输入 



    SQL》SELECT  STDDEV   HITS FROM   TEAMSTATS 



    输出 



             STDDEV(HITS) 



             28。336666 



    同样  对字符型列应用该函数时会得到错误信息 



    输入/输出 



    SQL》SELECT  STDDEV(NAME)   FROM  TEAMSTATS 



    ERROR 



    ORA…01722   invalid  number 



   no rows selected 



    这些统计函数也可以在一个语句中同时使用 



    输入/输出 



    SQL》SELECT  COUNT   AB   AVG(AB)  MIN(AB)  MAX(AB)   STDDEV(AB) 



       VARIANCE(AB)   SUM(AB)  FROM  TEAMSTATS 



COUNT(   AVG(A   MIN(A   MAX(    STDDEV(  VARIANCE   SUM(A 



AB)      B)      B)      AB)    AB)       (AB)       B) 



6         119。167 1      187     75。589   5712。97    715 



    当你下次见到比赛结果时  你应该知道了 SQL 正在它的后台工作 



日期/ 时间函数 



    我们的生活是由日期和时间来掌握的             大多数的 SQL 解释器都提供了对它进行支持的 



函数  在这一部分我们使用 PROJECT 表来演求日期和时间函数的用法 



    输入 



    SQL》 SELECT *  FROM   PROJECT 



    输出 



       TASK            STARTDATE    ENDDATE 



EMAIL wyhsillypig@163。                                           68 


…………………………………………………………Page 69……………………………………………………………

SQL 21  日自学通(V1。0)                                           翻译人   笨猪 



       KICKOFFMTG          01…APR…95   01…APR…95 



       TECHSURVEY          02…APR…95   01…MAY…95 



       USERMTGS            15…MAY…95   30…MAY…95 



       DESIGNWIDGET        01…JUN…95   30…JUN…95 



       CODEWIDGET          01…JUL…95   02…SEP…95 



       TESTING             03…SEP…95   17…JAN…96 



    注  这里的数据类型使用日期型           大多数 SQL 解释器都有日期型  但是在语法的细则 



上有不同之处 



ADD_MONTHS 



    该函数的功能是将给定的日期增加一个月                举例来说     由于一些特殊的原因  上述的 



计划需要推迟两个月         那么可以用下面的方法来重新生成一个日程表 



    输入 



    SQL》SELECT  TASK  STARTDATE   ENDDATE 



       ORIGINAL_END   ADD_MONTHS(ENDDATE;2)   FROM   PROJECT 



    输出 



     TASK         STARTDATE    ORIGINAL    ADD_MONTH 



  KICKOFFMTG      01…APR…95    01…APR…95    01…JUN…95 



  TECHSURVEY      02…APR…95    01…MAY…95     01…JUL…95 



   USERMTGS       15…MAY…95    30…MAY…95     30…JUL…95 



 DESIGNWIDGET     01…JUN…95    30…JUN…95    31…AUG…95 



  CODEWIDGET       01…JUL…95   02…SEP…95    02…NOV…95 



    TESTING        03…SEP…95   17…JAN…96    17…MAR…96 



    尽管这种延误不太可能发生           但是实现日程的变动却是非常容易的               ADD_MONTHS 



也可能工作在 SELECT 之外  试着输入 



    输入 



    SQL》SELECT  TASK  TASKS_SHORTER_THAN_ONE_MONTH 



       FROM   PROJECT  WHERE ADD_MONTHS(STARTDATE     1)  ENDDATE 



    结果如下所示 



    输出 



          TASKS_SHORTER_THAN_ONE_MONTH 



EMAIL wyhsillypig@163。                                           69 


…………………………………………………………Page 70……………………………………………………………

SQL 21  日自学通(V1。0)                                             翻译人    笨猪 



          KICKOFF MTG 



          TECH SURVEY 



          USER MTGS 



          DESIGN WIDGET 



分析 



    你将会发现这一部分中的几乎所有的函数都可能工作在不只一个地方                            但是   如果没 



有 TO_CHAR 和 TO_DATE 函数的帮助  ADD_MONTH 就无法在字符或数字类型中工作 



这将在今天的晚些时候讨论 



LAST_DAY 



    LAST_DAY 可以返回指定月份的最后一天  例如               如果你想知道在 ENDDATE 列中的 



给出日期中月份的最后一天是几号时               你可以输入 



    输入 



    SQL》SELECT   ENDDATE   LAST_DAY   ENDDATE     FROM   PROJECT 



    结果如下 



    输出 



            ENDDATE     LAST_DAY(ENDDATE) 



            01…APR…95    30…APR…95 



            01…MAY…95    31…MAY…95 



            30…MAY…95    31…MAY…95 



            30…JUN…95    30…JUN…95 



            02…SEP…95    30…SEP…95 



            17…JAN…96    31…JAN…96 



    如果是在闰年的最后一天呢 



    输入/输出 



    SQL》SELECT   LAST_DAY(   1…FEB…95 ) NON_LEAP   LAST_DAY(   

返回目录 上一页 下一页 回到顶部 0 0

你可能喜欢的