友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
一世书城 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

SQL 21日自学通(V3.0)(PDF格式)-第31章

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






         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 



                             60             60 



                             34             34 



                             87。5           87。5 



                            25             25 



                            24。35          24。35 



    如果我们在分组时指定的列名与 SELECT                   中所指定的列名不相同时会有什么情况发生 



呢 



    INPUT/OUTPUT 



    SELECT    PAYEE    MAX    AMOUNT       MIN   AMOUNT     FROM     CHECKS 



    GROUP     BY   REMARKS 



    Dynamic   SQL   Error 



    …SQL error code = …104 



    …invalid column reference 



分析 



    查询无法对 REMARK 进行分组                当查询在 REMARK  字段中找到了两个重复的数值 



但它们的 PAYEE 不同  这表明 GAS 有两个 PAYEE                  这将会导致错误的产生 



    规则是      当要求分组结果返回多个数值时不能在在 SELECT                       子句中使用除分组列以外 



的列  这将会导致错误的返回值                 你可以使用在 SELECT  中未列出的列进行分组  例如 



    INPUT/OUTPUT 



    SELECT    PAYEE    COUNT    AMOUNT        FROM    CHECKS 



    GROUP BY PAYEE; AMOUNT; 



    PAYEE                                   COUNT 



    Abes Cleaners                           1 



    Abes Cleaners                           1 



    Cash                                    1 



EMAIL   wyhsillypig@163。                                                       109 


…………………………………………………………Page 110……………………………………………………………

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



     Cash                                     1 



     Cash                                     1 



     Joans Gas                                1 



     Joans Gas                                1 



     Joes Stale  Dent                        1 



     Local Utilities                          1 



     Local Utilities                        
返回目录 上一页 下一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!