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

第25部分

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

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

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 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                          1 



     Local Utilities                          1 



     Ma Bell                                  1 



     Ma Bell                                  1 



     Reading R。R                              1 



分析 



    这个愚蠢的查询显示的记录与你在表中输入的记录数一样多  这表明你可以在 GROUP 



BY 中使用 AMOUNT          尽管在 SELECT  中没有提到过该字段  现在试着将 AMOUNT  字段 



从 GROUN 部分移动到 SELECT 部分               如下例 



     SELECT   PAYEE    AMOUNT      COUNT     AMOUNT      FROM    CHECKS    GROUP     BY 



PAYEE 



    Dynamic SQL Error 



    …SQL error code = …104 



    …invalid column reference 



SQL 不能运行查询           因为在 SELECT      中出现的字段没有在 GROUP  BY  中指出  所以我们 



不得不采用下边的方法进行分组 



    INPUT/OUTPUT 



     SELECT    PAYEE    AMOUNT      REMARKS      FROM    CHECKS     WHERE      PAYEE 



  Cash 



                PAYEE           AMOUNT           REMARKS 



                Cash            25               Wild Night Out 



                Cash            60               Trip to Boston 



                Cash            34               Trip to Dayton 



     如果你的用户要求你将这三行数据输出并按 PAYEE 进行分组的话                                 那么请问数据并不 



重复的 REMARKS  字段的内容应该放在哪里  切记                        当进行分组以后由于这三行数据是同 



一组  所以结果只有一行  SQL 无法在同时为你做两种工作  所以它会说  Error #31                                   Can't 



do two things at once。 



EMAIL   wyhsillypig@163。                                                          110 


…………………………………………………………Page 111……………………………………………………………

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



HAVING 子句 



如何对你需要进行分组的数据进行限制呢  这里我们使用 ORGCHART  表                            内容如下 



    INPUT 



    SELECT   *  FRO

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

你可能喜欢的