龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 数据库类 > Oracle 技术 >

Oracle SQL:经典查询练手第四篇(1)(2)

时间:2011-04-12 23:18来源:未知 作者:admin 点击:
分享到:
各试题解答如下(欢迎大家指出不同的方法或建议!): /* --------1、各个部门平均、最大、最小工资、人数,按照部门号升序排列。---------*/ SQL SELECT DEPARTME

各试题解答如下(欢迎大家指出不同的方法或建议!):

  1. /*--------1、各个部门平均、最大、最小工资、人数,按照部门号升序排列。---------*/  
  2. SQL> SELECT DEPARTMENT_ID AS 部门号,AVG(SALARY) AS 平均工资  
  3.   2         ,MAX(SALARY) AS 最高工资,MIN(SALARY)  AS 最低工资  
  4.   3         ,COUNT(*) AS 人数  
  5.   4  FROM EMPLOYEES  
  6.   5  GROUP BY DEPARTMENT_ID  
  7.   6  ORDER BY DEPARTMENT_ID ASC;  
  8.    
  9.    部门号       平均工资       最高工资       最低工资         人数  
  10. ------         ----------         ----------         ----------         ----------  
  11.        10           4400               4400               4400                 1  
  12.     20          9500              13000           6000                  2  
  13.     30           4150              11000           2500                  6  
  14.     40           6500               6500               6500                  1  
  15.     50             3475.55555     8200               2100                 45  
  16.     60           5760               9000               4200                  5  
  17.     70          10000              10000              10000                  1  
  18.     80             8973.85294     14000           6100                 34  
  19.     90             21333.3333     24000              20000                  3  
  20.    100           8600              12000           6900                  6  
  21.    110          10150              12000           8300                  2  
  22.                 7000               7000               7000                  1  
  23.    
  24. 12 rows selected  
  25.  
  26. /*--------2、各个部门中工资大于5000的员工人数。---------*/  
  27. SQL> SELECT DEPARTMENT_ID,COUNT(*) FROM EMPLOYEES  
  28.    2  WHERE SALARY > 5000  
  29.    3  GROUP BY DEPARTMENT_ID;  
  30.    
  31. DEPARTMENT_ID   COUNT(*)  
  32. ------------- ----------  
  33.            20          2  
  34.            30          1  
  35.            40          1  
  36.            50          5  
  37.            60          2  
  38.            70          1  
  39.            80         34  
  40.            90          3  
  41.           100          6  
  42.           110          2  
  43.                        1  
  44.    
  45. 11 rows selected  
  46.  
  47. /*--------3、各个部门平均工资和人数,按照部门名字升序排列。---------*/  
  48.  
  49. SQL> SELECT DPTNAME,AVG(SALARY),COUNT(*) FROM 
  50.   2         (SELECT 
  51.   3             (SELECT DEPT.DEPARTMENT_NAME FROM DEPARTMENTS DEPT  
  52.   4             WHERE DEPT.DEPARTMENT_ID = EMP.DEPARTMENT_ID) DPTNAME,  
  53.   5             EMP.SALARY  
  54.   6  FROM EMPLOYEES EMP)  
  55.   7  GROUP BY DPTNAME  
  56.   8  ORDER BY DPTNAME;  
  57.    
  58. DPTNAME                        AVG(SALARY)   COUNT(*)  
  59. ------------------------------ ----------- ----------  
  60. Accounting                           10150          2  
  61. Administration                        4400          1  
  62. Executive                      21333.33333          3  
  63. Finance                               8600          6  
  64. Human Resources                       6500          1  
  65. IT                                    5760          5  
  66. Marketing                             9500          2  
  67. Public Relations                     10000          1  
  68. Purchasing                            4150          6  
  69. Sales                          8973.852941         34  
  70. Shipping                       3475.555555         45  
  71.                                       7000          1   
  72. 12 rows selected  
  73.  
  74. --或者--  
  75.  
  76. SQL> SELECT DEPT.DEPARTMENT_NAME,AVG(EMP.SALARY),COUNT(*)  
  77.    2  FROM EMPLOYEES EMP,DEPARTMENTS DEPT  
  78.    3  WHERE EMP.DEPARTMENT_ID = DEPT.DEPARTMENT_ID  
  79.    4  GROUP BY DEPT.DEPARTMENT_NAME  
  80.    5  ORDER BY DEPT.DEPARTMENT_NAME;  
  81.    
  82. DEPARTMENT_NAME                AVG(EMP.SALARY)   COUNT(*)  
  83. ------------------------------ --------------- ----------  
  84. Accounting                               10150          2  
  85. Administration                            4400          1  
  86. Executive                      21333.333333333          3  
  87. Finance                                   8600          6  
  88. Human Resources                           6500          1  
  89. IT                                        5760          5  
  90. Marketing                                 9500          2  
  91. Public Relations                         10000          1  
  92. Purchasing                                4150          6  
  93. Sales                          8973.8529411764         34  
  94. Shipping                       3475.5555555555         45  
  95.    
  96. 11 rows selected  
  97. --可以看到,这种方式,对于部门号为空的没有统计出来  
  98.  
  99. /*--------4、列出每个部门中有同样工资的员工的统计信息,  
  100.   列出他们的部门号,工资,人数。---------*/  
  101.  
  102. SQL> SELECT EMP1.DEPARTMENT_ID,EMP1.SALARY,COUNT(*) CNT  
  103.    2  FROM   EMPLOYEES EMP1,EMPLOYEES EMP2  
  104.    3  WHERE  EMP1.DEPARTMENT_ID = EMP2.DEPARTMENT_ID AND 
  105.    4          EMP1.SALARY = EMP2.SALARY  
  106.    5          AND EMP1.EMPLOYEE_ID <> EMP2.EMPLOYEE_ID  
  107.    6  GROUP BY EMP1.DEPARTMENT_ID,EMP1.SALARY;  
  108.    
  109. DEPARTMENT_ID     SALARY        CNT  
  110. ------------- ---------- ----------  
  111.            50    2200.00          2  
  112.            50    2400.00          2  
  113.            50    2500.00         20  
  114.            50    2600.00          6  
  115.            50    2700.00          2  
  116.            50    2800.00          6  
  117.            50    2900.00          2  
  118.            50    3000.00          2  
  119.            50    3100.00          6  
  120.            50    3200.00         12  
  121.            50    3300.00          2  
  122.            50    3600.00          2  
  123.            60    4800.00          2  
  124.            80    7000.00          2  
  125.            80    7500.00          2  
  126.            80    8000.00          6  
  127.            80    9000.00          2  
  128.            80    9500.00          6  
  129.            80   10000.00          6  
  130.            80   10500.00          2   
  131.            80   11000.00          2  
  132.            90   20000.00          2  
  133.    
  134. 22 rows selected  
  135.  
  136. /*--------5、列出同部门中工资高于1000 的员工数量超过2 人的部门,  
  137. 显示部门名字、地区名称。---------*/  
  138.  
  139. SQL> SELECT D.DEPARTMENT_NAME,L.CITY,COUNT(*)  
  140.    2  FROM EMPLOYEES E,DEPARTMENTS D,LOCATIONS L  
  141.    3  WHERE E.DEPARTMENT_ID = D.DEPARTMENT_ID AND 
  142.    4         D.LOCATION_ID   = L.LOCATION_ID    AND 
  143.    5         E.SALARY > 1000  
  144.    6  GROUP BY D.DEPARTMENT_NAME,L.CITY  
  145.    7  HAVING COUNT(*) > 2;  
  146.    
  147. DEPARTMENT_NAME                CITY                             COUNT(*)  
  148. ------------------------------ ------------------------------ ----------  
  149. IT                             Southlake                               5  
  150. Sales                          Oxford                                 34  
  151. Finance                        Seattle                                 6  
  152. Shipping                       South San Francisco                    45  
  153. Executive                      Seattle                                 3  
  154. Purchasing                     Seattle                                 6  
  155.    
  156. rows selected 

精彩图集

赞助商链接