[推荐]ORACLE SQL:经典查询练手第四篇(不懂装懂,永世饭桶!)

[推荐]ORACLE SQL

经典查询练手第四篇(不懂装懂,永世饭桶!)

——通过知识共享树立个人品牌。

本文与大家共同讨论与分享ORACLE SQL的一些常用经典查询,欢迎大家补充,同时你认为有那些经典的也可分享出来。在本文中,对每一个问题,你要是认为有什么更好的解决方法也欢迎你及时提出。交流与分享才能共同进步嘛,感谢!

接上三篇:

[推荐]ORACLE SQL:经典查询练手第一篇

[推荐]ORACLE SQL:经典查询练手第二篇

[推荐]ORACLE SQL:经典查询练手第三篇

本篇数据查询属于复杂业务,难度比较高,请继续努力,通过我为大家设立的这个系列,循序渐进,只要你对每一篇,每一个试题都实践测试,认真练习。我相信你对常用、经典的、复杂的SQL已能熟能生巧,信手拈来!

本文使用ORACLE自带的人力资源(HR)实例数据,本文所用表结构如下:

表名:REGIONS

序号

列名

数据类型

长度

小数位

标识

主键

允许空

默认值

说明

1

REGION_ID

NUMBER

2

REGION_NAME

VARCHAR2

25

表名:COUNTRIES

序号

列名

数据类型

长度

小数位

标识

主键

允许空

默认值

说明

1

COUNTRY_ID

CHAR

2

2

COUNTRY_NAME

VARCHAR2

40

3

REGION_ID

NUMBER

表名:LOCATIONS

序号

列名

数据类型

长度

小数位

标识

主键

允许空

默认值

说明

1

LOCATION_ID

NUMBER

4

0

2

STREET_ADDRESS

VARCHAR2

40

3

POSTAL_CODE

VARCHAR2

12

4

CITY

VARCHAR2

30

5

STATE_PROVINCE

VARCHAR2

25

6

COUNTRY_ID

CHAR

2

表名:DEPARTMENTS

序号

列名

数据类型

长度

小数位

标识

主键

允许空

默认值

说明

1

DEPARTMENT_ID

NUMBER

4

0

2

DEPARTMENT_NAME

VARCHAR2

30

3

MANAGER_ID

NUMBER

6

0

4

LOCATION_ID

NUMBER

4

0

表名:JOBS

序号

列名

数据类型

长度

小数位

标识

主键

允许空

默认值

说明

1

JOB_ID

VARCHAR2

10

2

JOB_TITLE

VARCHAR2

35

3

MIN_SALARY

NUMBER

6

0

4

MAX_SALARY

NUMBER

6

0

表名:EMPLOYEES

序号

列名

数据类型

长度

小数位

标识

主键

允许空

默认值

说明

1

EMPLOYEE_ID

NUMBER

6

0

2

FIRST_NAME

VARCHAR2

20

3

LAST_NAME

VARCHAR2

25

4

EMAIL

VARCHAR2

25

5

PHONE_NUMBER

VARCHAR2

20

6

HIRE_DATE

DATE

7

7

JOB_ID

VARCHAR2

10

8

SALARY

NUMBER

8

2

9

COMMISSION_PCT

NUMBER

2

2

10

MANAGER_ID

NUMBER

6

0

11

DEPARTMENT_ID

NUMBER

4

0

ER图:

SQL完成以下问题列表:

1. 各个部门平均、最大、最小工资、人数,按照部门号升序排列。

2. 各个部门中工资大于5000的员工人数。

3. 各个部门平均工资和人数,按照部门名字升序排列。

4. 列出每个部门中有同样工资的员工的统计信息,列出他们的部门号,工资,人数。

5. 列出同部门中工资高于1000 的员工数量超过2 人的部门,显示部门名字、地区名称。

6. 哪些员工的工资,高于整个公司的平均工资,列出员工的名字和工资(降序)。

7. 哪些员工的工资,介于5080部门平均工资之间。

8. 所在部门平均工资高于5000 的员工名字。

9. 列出各个部门中工资最高的员工的信息:名字、部门号、工资。

10. 最高的部门平均工资是多少。

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

/*--------1、各个部门平均、最大、最小工资、人数,按照部门号升序排列。---------*/

SQL> SELECT DEPARTMENT_ID AS 部门号,AVG(SALARY) AS 平均工资

2 ,MAX(SALARY) AS 最高工资,MIN(SALARY) AS 最低工资

3 ,COUNT(*) AS 人数

4 FROM EMPLOYEES

5 GROUP BY DEPARTMENT_ID

6 ORDER BY DEPARTMENT_ID ASC;

部门号 平均工资 最高工资 最低工资 人数

------ ---------- ---------- ---------- ----------

10 4400 4400 4400 1

20 9500 13000 6000 2

30 4150 11000 2500 6

40 6500 6500 6500 1

50 3475.55555 8200 2100 45

60 5760 9000 4200 5

70 10000 10000 10000 1

80 8973.85294 14000 6100 34

90 21333.3333 24000 20000 3

100 8600 12000 6900 6

110 10150 12000 8300 2

7000 7000 7000 1

12 rows selected

/*--------2、各个部门中工资大于5000的员工人数。---------*/

SQL> SELECT DEPARTMENT_ID,COUNT(*) FROM EMPLOYEES

2 WHERE SALARY > 5000

3 GROUP BY DEPARTMENT_ID;

DEPARTMENT_ID COUNT(*)

------------- ----------

20 2

30 1

40 1

50 5

60 2

70 1

80 34

90 3

100 6

110 2

1

11 rows selected

/*--------3、各个部门平均工资和人数,按照部门名字升序排列。---------*/

SQL> SELECT DPTNAME,AVG(SALARY),COUNT(*) FROM

2 (SELECT

3 (SELECT DEPT.DEPARTMENT_NAME FROM DEPARTMENTS DEPT

4 WHERE DEPT.DEPARTMENT_ID = EMP.DEPARTMENT_ID) DPTNAME,

5 EMP.SALARY

6 FROM EMPLOYEES EMP)

7 GROUP BY DPTNAME

8 ORDER BY DPTNAME;

DPTNAME AVG(SALARY) COUNT(*)

------------------------------ ----------- ----------

Accounting 10150 2

Administration 4400 1

Executive 21333.33333 3

Finance 8600 6

Human Resources 6500 1

IT 5760 5

Marketing 9500 2

Public Relations 10000 1

Purchasing 4150 6

Sales 8973.852941 34

Shipping 3475.555555 45

7000 1

12 rows selected

--或者--

SQL> SELECT DEPT.DEPARTMENT_NAME,AVG(EMP.SALARY),COUNT(*)

2 FROM EMPLOYEES EMP,DEPARTMENTS DEPT

3 WHERE EMP.DEPARTMENT_ID = DEPT.DEPARTMENT_ID

4 GROUP BY DEPT.DEPARTMENT_NAME

5 ORDER BY DEPT.DEPARTMENT_NAME;

DEPARTMENT_NAME AVG(EMP.SALARY) COUNT(*)

------------------------------ --------------- ----------

Accounting 10150 2

Administration 4400 1

Executive 21333.333333333 3

Finance 8600 6

Human Resources 6500 1

IT 5760 5

Marketing 9500 2

Public Relations 10000 1

Purchasing 4150 6

Sales 8973.8529411764 34

Shipping 3475.5555555555 45

11 rows selected

--可以看到,这种方式,对于部门号为空的没有统计出来

/*--------4、列出每个部门中有同样工资的员工的统计信息,

列出他们的部门号,工资,人数。---------*/

SQL> SELECT EMP1.DEPARTMENT_ID,EMP1.SALARY,COUNT(*) CNT

2 FROM EMPLOYEES EMP1,EMPLOYEES EMP2

3 WHERE EMP1.DEPARTMENT_ID = EMP2.DEPARTMENT_ID AND

4 EMP1.SALARY = EMP2.SALARY

5 AND EMP1.EMPLOYEE_ID <> EMP2.EMPLOYEE_ID

6 GROUP BY EMP1.DEPARTMENT_ID,EMP1.SALARY;

DEPARTMENT_ID SALARY CNT

------------- ---------- ----------

50 2200.00 2

50 2400.00 2

50 2500.00 20

50 2600.00 6

50 2700.00 2

50 2800.00 6

50 2900.00 2

50 3000.00 2

50 3100.00 6

50 3200.00 12

50 3300.00 2

50 3600.00 2

60 4800.00 2

80 7000.00 2

80 7500.00 2

80 8000.00 6

80 9000.00 2

80 9500.00 6

80 10000.00 6

80 10500.00 2

80 11000.00 2

90 20000.00 2

22 rows selected

/*--------5、列出同部门中工资高于1000 的员工数量超过2 人的部门,

显示部门名字、地区名称。---------*/

SQL> SELECT D.DEPARTMENT_NAME,L.CITY,COUNT(*)

2 FROM EMPLOYEES E,DEPARTMENTS D,LOCATIONS L

3 WHERE E.DEPARTMENT_ID = D.DEPARTMENT_ID AND

4 D.LOCATION_ID = L.LOCATION_ID AND

5 E.SALARY > 1000

6 GROUP BY D.DEPARTMENT_NAME,L.CITY

7 HAVING COUNT(*) > 2;

DEPARTMENT_NAME CITY COUNT(*)

------------------------------ ------------------------------ ----------

IT Southlake 5

Sales Oxford 34

Finance Seattle 6

Shipping South San Francisco 45

Executive Seattle 3

Purchasing Seattle 6

6 rows selected

/*--------6、哪些员工的工资,高于整个公司的平均工资,

列出员工的名字和工资(降序)。---------*/

SQL> SELECT FIRST_NAME || ' ' || LAST_NAME,SALARY

2 FROM EMPLOYEES

3 WHERE SALARY > (

4 SELECT AVG(SALARY)

5 FROM EMPLOYEES

6 )

7 ORDER BY SALARY DESC;

FIRST_NAME||''||LAST_NAME SALARY

---------------------------------------------- ----------

Steven King 24000.00

Neena Kochhar 20000.00

Lex De Haan 20000.00

John Russell 14000.00

Karen Partners 13500.00

Michael Hartstein 13000.00

Nancy Greenberg 12000.00

Alberto Errazuriz 12000.00

Shelley Higgins 12000.00

Lisa Ozer 11500.00

Den Raphaely 11000.00

Gerald Cambrault 11000.00

Ellen Abel 11000.00

Eleni Zlotkey 10500.00

Clara Vishney 10500.00

Peter Tucker 10000.00

Janette King 10000.00

Harrison Bloom 10000.00

Hermann Baer 10000.00

Tayler Fox 9600.00

--50条数据

/*--------7、哪些员工的工资,介于50 80 部门平均工资之间。---------*/

SQL> SELECT FIRST_NAME || ' ' || LAST_NAME AS NAME,SALARY

2 FROM EMPLOYEES

3 WHERE SALARY

4 BETWEEN

5 (SELECT AVG(SALARY) FROM EMPLOYEES

6 WHERE DEPARTMENT_ID = 50)

7 AND (SELECT AVG(SALARY) FROM EMPLOYEES

8 WHERE DEPARTMENT_ID = 80);

NAME SALARY

---------------------------------------------- ----------

Bruce Ernst 6000.00

David Austin 4800.00

Valli Pataballa 4800.00

Diana Lorentz 4200.00

John Chen 8200.00

Ismael Sciarra 7700.00

Jose Manuel Urman 7800.00

Luis Popp 6900.00

Matthew Weiss 8000.00

Adam Fripp 8200.00

Payam Kaufling 7900.00

Shanta Vollman 6500.00

Kevin Mourgos 5800.00

Renske Ladwig 3600.00

Trenna Rajs 3500.00

Christopher Olsen 8000.00

Nanette Cambrault 7500.00

Oliver Tuvault 7000.00

Lindsey Smith 8000.00

Louise Doran 7500.00

Sarath Sewall 7000.00

Mattea Marvins 7200.00

David Lee 6800.00

Sundar Ande 6400.00

Amit Banda 6200.00

William Smith 7400.00

Elizabeth Bates 7300.00

Sundita Kumar 6100.00

Alyssa Hutton 8800.00

Jonathon Taylor 8600.00

Jack Livingston 8000.00

Kimberely Grant 7000.00

Charles Johnson 7211.00

Nandita Sarchand 4200.00

Alexis Bull 4100.00

Kelly Chung 3800.00

Jennifer Dilly 3600.00

Sarah Bell 4000.00

Britney Everett 3900.00

Jennifer Whalen 4400.00

Pat Fay 6000.00

Susan Mavris 6500.00

William Gietz 8300.00

43 rows selected

/*--------8、所在部门平均工资高于5000 的员工名字。---------*/

SQL> SELECT FIRST_NAME || ' ' || LAST_NAME AS NAME,SALARY

2 FROM EMPLOYEES

3 WHERE DEPARTMENT_ID IN

4 (SELECT DEPARTMENT_ID FROM EMPLOYEES

5 GROUP BY DEPARTMENT_ID

6 HAVING AVG(SALARY) > 5000);

NAME SALARY

---------------------------------------------- ----------

Michael Hartstein 13000.00

Pat Fay 6000.00

Susan Mavris 6500.00

Alexander Hunold 9000.00

Bruce Ernst 6000.00

David Austin 4800.00

Valli Pataballa 4800.00

Diana Lorentz 4200.00

Hermann Baer 10000.00

John Russell 14000.00

Karen Partners 13500.00

Alberto Errazuriz 12000.00

Gerald Cambrault 11000.00

Eleni Zlotkey 10500.00

Peter Tucker 10000.00

David Bernstein 9500.00

Peter Hall 9000.00

Christopher Olsen 8000.00

Nanette Cambrault 7500.00

Oliver Tuvault 7000.00

--54行数据

/*--------9、列出各个部门中工资最高的员工的信息:名字、部门号、工资。---------*/

SQL> SELECT FIRST_NAME || ' ' || LAST_NAME AS NAME

2 ,SALARY,DEPARTMENT_ID

3 FROM EMPLOYEES

4 WHERE (DEPARTMENT_ID,SALARY) IN

5 (SELECT DEPARTMENT_ID,MAX(SALARY)

6 FROM EMPLOYEES

7 GROUP BY DEPARTMENT_ID);

NAME SALARY DEPARTMENT_ID

---------------------------------------------- ---------- -------------

Jennifer Whalen 4400.00 10

Michael Hartstein 13000.00 20

Den Raphaely 11000.00 30

Susan Mavris 6500.00 40

Adam Fripp 8200.00 50

Alexander Hunold 9000.00 60

Hermann Baer 10000.00 70

John Russell 14000.00 80

Steven King 24000.00 90

Nancy Greenberg 12000.00 100

Shelley Higgins 12000.00 110

11 rows selected

/*--------10、最高的部门平均工资是多少。---------*/

SQL> SELECT MAX(AVGSALARY)

2 FROM(SELECT DEPARTMENT_ID,AVG(SALARY) AVGSALARY

3 FROM EMPLOYEES

4 GROUP BY DEPARTMENT_ID);

MAX(AVGSALARY)

--------------

21333.33333333

© 2011 EricHu

原创作品,转贴请注明作者和出处,留此信息。

------------------------------------------------

cnBlobs:http://www.cnblogs.com/huyong/
优快云http://blog.youkuaiyun.com/chinahuyong

作者:EricHuDBC/SB/SWebServiceWCFPM等)
出处:http://www.cnblogs.com/huyong/

Q Q80368704 E-Mail: 80368704@qq.com
本博文欢迎大家浏览和转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,在『参考』的文章中,我会表明参考的文章来源,尊重他人版权。若您发现我侵犯了您的版权,请及时与我联系。
更多文章请看[置顶]索引贴——(不断更新中)

<think>嗯,用户遇到了一个ImportError,看起来是numpy相关的DLL加载失败的问题。错误信息里提到在导入_multiarray_umath时找不到指定的模块。这个问题通常发生在Windows系统上,尤其是使用conda环境的时候。首先,我需要考虑可能的原因。 首先,用户可能安装的numpy版本有问题,或者有多个版本冲突。另一个可能是环境中的某些依赖库缺失或者损坏,比如Microsoft Visual C++ Redistributable。此外,pygrib这个库可能依赖特定版本的numpy,如果版本不兼容也会导致问题。 用户提到他们是在导入pygrib时出现错误的,而pygrib又依赖numpy。所以问题可能出在numpy的安装上。错误信息中的DLL加载失败可能意味着numpy的某个核心组件无法正确加载,可能是因为系统缺少必要的运行时库,或者numpy安装不完整。 接下来,我应该建议用户检查他们的环境,确保conda环境正确激活,并且尝试重新安装numpy。如果重新安装numpy无效,可能需要安装或更新Visual C++ Redistributable。此外,检查是否有多个Python环境导致冲突,或者考虑使用conda-forge频道安装,因为conda-forge的包通常依赖关系处理得更好。 另外,用户可能需要彻底清除环境并重新安装所有依赖,确保所有库版本兼容。如果问题依旧,可能需要更深入地检查系统路径或DLL文件是否存在问题。最后,如果用户无法解决,可能需要寻求更专业的帮助,比如在相关论坛提问,提供完整的错误信息环境细节。</think>这个错误属于`numpy`库的核心组件导入失败问题,常见于Windows系统环境配置冲突或依赖缺失。以下是分步解决方案: --- ### **错误原因分析** 1. **核心错误**:`ImportError: numpy._core.multiarray failed to import` 2. **触发场景**: - 使用`conda`或`pip`安装的`numpy`版本与当前Python环境不兼容 - 系统中缺少必要的动态链接库(如`mkl_*.dll`或`VCRUNTIME`运行时库) - 多版本Python或虚拟环境冲突 --- ### **解决方案步骤** #### **第一步:检查conda环境** 1. 确保当前激活了正确的环境: ```bash conda activate handle_grib ``` 2. 验证Pythonnumpy版本: ```bash python -V conda list numpy ``` #### **第二步:重新安装numpy** 1. **彻底卸载旧版本**: ```bash conda remove --force numpy pip uninstall numpy -y ``` 2. **通过conda-forge安装**(优先推荐): ```bash conda install -c conda-forge numpy ``` > *conda-forge的预编译包兼容性更好* #### **第三步:安装Microsoft运行时库** - 下载并安装最新版 **Microsoft Visual C++ Redistributable**: [官方下载地址](https://aka.ms/vs/17/release/vc_redist.x64.exe) #### **第四步:检查系统PATH变量** 1. 确保`conda`环境的路径在系统PATH中优先级最高: ```bash echo %PATH% ``` > 若存在多个Python路径,需删除冲突项 #### **第五步:重建虚拟环境(终极方案)** 1. 删除旧环境: ```bash conda remove --name handle_grib --all -y ``` 2. 新建环境并指定Python版本: ```bash conda create -n handle_grib python=3.9 conda activate handle_grib ``` 3. 优先安装numpy: ```bash conda install -c conda-forge numpy ``` 4. 再安装其他依赖: ```bash conda install -c conda-forge pygrib xarray ``` --- ### **附加说明** - 若仍报错,尝试直接安装预编译的`numpy+mkl`: ```bash pip install --pre --upgrade -i https://pypi.anaconda.org/scipy-wheels-nightly/simple numpy ``` - 确保系统中无第三方安全软件拦截DLL加载。 --- ### **典型成功案例** - 用户环境:Windows 10 + Anaconda3-2023.03 - 操作记录: ```bash conda create -n test_env python=3.10 conda activate test_env conda install -c conda-forge numpy=1.24.3 python -c "import numpy" # 成功执行无报错 ``` 若问题仍未解决,建议提供完整环境配置信息(`conda list`输出)进一步分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值