会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 133787个问题

查找各部门薪资最低的雇员,并显示雇员的名字,薪水,部门ID。

这一题视频中的解答有问题。各部门薪水最低的雇员的薪资应该是唯一的,但是视频中解答的SQL的输出结果如下:

SQL> select last_name,salary,department_id from employees where salary in (select min(salary) 
from employees group by department_id) order by department_id;
LAST_NAME                     SALARY DEPARTMENT_ID
------------------------- ---------- -------------
Whalen                       4400.00            10
Fay                          6000.00            20
Colmenares                   2500.00            30
Mavris                       6500.00            40
Olson                        2100.00            50
Patel                        2500.00            50
Vargas                       2500.00            50
Marlow                       2500.00            50
Vollman                      6500.00            50
Perkins                      2500.00            50
Sarchand                     4200.00            50
Sullivan                     2500.00            50
Lorentz                      4200.00            60
Ernst                        6000.00            60
Baer                        10000.00            70
Kumar                        6100.00            80
Bloom                       10000.00            80
Sewall                       7000.00            80
King                        10000.00            80
Tucker                      10000.00            80
LAST_NAME                     SALARY DEPARTMENT_ID
------------------------- ---------- -------------
Tuvault                      7000.00            80
De Haan                     17000.00            90
Kochhar                     17000.00            90
Popp                         6900.00           100
Gietz                        8300.00           110
Grant                        7000.00 
26 rows selected

以部门50为例有多个最低薪资,这个不符合逻辑。


我觉得这里要使用到关联子查询,如下:

SQL> select e1.last_name,e1.salary,e1.department_id from employees e1 where e1.department_id in(
  2      select distinct e2.department_id from employees e2
  3  ) and e1.salary=(
  4      select min(e3.salary) from employees e3 where e3.department_id=e1.department_id
  5  ) order by e1.department_id;
LAST_NAME                     SALARY DEPARTMENT_ID
------------------------- ---------- -------------
Whalen                       4400.00            10
Fay                          6000.00            20
Colmenares                   2500.00            30
Mavris                       6500.00            40
Olson                        2100.00            50
Lorentz                      4200.00            60
Baer                        10000.00            70
Kumar                        6100.00            80
De Haan                     17000.00            90
Kochhar                     17000.00            90
Popp                         6900.00           100
Gietz                        8300.00           110
12 rows selected

其中部门90出现两次是因为两人并列最低部门薪资。

SQL> select last_name,salary,department_id from employees where department_id=90;
LAST_NAME                     SALARY DEPARTMENT_ID
------------------------- ---------- -------------
King                        24000.00            90
Kochhar                     17000.00            90
De Haan                     17000.00            90


JAVA 全系列/第四阶段:数据库与AI协同技术实战/SQL 语言 3781楼
Python 全系列/第一阶段:AI驱动的Python编程/控制语句 3783楼
JAVA 全系列/第一阶段:AI驱动的JAVA编程/数组和数据存储 3789楼

老师这是我自己写的,为什么一直显示文件不存在,

import struct
from socket import *
filename='dog.jpg'
server_ip='10.15.249.68'
send_data=struct.pack('!H%dsb5sb'%len(filename),1,filename.encode(),0,'octer'.encode(),0)
s=socket(AF_INET,SOCK_DGRAM)
s.sendto(send_data,(server_ip,69))#tftp端口号为69,适合在局域网传送文件

f=open(filename,'ab')
while True:
    recv_data=s.recvfrom(1024)
    caozuoma,ack_num=struct.unpack('!HH',recv_data[0][:4])#获取数据模块编号
    rand_port=recv_data[1][1]#获取服务器的随机端口
    if int(caozuoma)==5:
        print('文件不存在')
        break
    print('操作码:%d,ACK:%d,服务器随机端口:%d,数据长度:%d'%(caozuoma,ack_num,rand_port,len(recv_data[0])))
    f.write(recv_data[0][4:])#写入数据
    if len(recv_data[0])<516:#小于516则文件完成
        break
    ack_data=struct.pack('!HH',4,ack_num)#发送确认包
    s.sendto(ack_data,(server_ip,rand_port))#回复ack确认包

image.png

下面是我把课件里的下载后把文件名改为我要下载的文件名就可以正确下载

import struct
from socket import *
filename = 'dog.jpg'
server_ip = '10.15.249.68'
send_data = struct.pack('!H%dsb5sb' % len(filename), 1, filename.encode(), 0, 'octet'.encode(), 0)
s = socket(AF_INET, SOCK_DGRAM)
s.sendto(send_data, (server_ip, 69))  # 第一次发送, 连接服务器69端口
f = open(filename, 'ab')  #a:以追加模式打开(必要时可以创建)append;b:表示二进制
while True:
    recv_data = s.recvfrom(1024)  # 接收数据
    caozuoma, ack_num = struct.unpack('!HH', recv_data[0][:4])  # 获取数据块编号
    rand_port = recv_data[1][1]  # 获取服务器的随机端口

    if int(caozuoma) == 5:
        print('文件不存在...')
        break
    print("操作码:%d,ACK:%d,服务器随机端口:%d,数据长度:%d"%(caozuoma, ack_num, rand_port, len(recv_data[0])))
    f.write(recv_data[0][4:])#将数据写入
    if len(recv_data[0]) < 516:
        break
    ack_data = struct.pack("!HH", 4, ack_num)
    s.sendto(ack_data, (server_ip, rand_port))  # 回复ACK确认包

image.png

Python 全系列/第三阶段:Python 网络与并发编程/网络通信 3790楼
JAVA 全系列/第三十二阶段:面试和成功求职的秘技/简历 3792楼
Python 全系列/第一阶段:AI驱动的Python编程/控制语句 3793楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/网络编程(旧) 3795楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园
网站维护:百战汇智(北京)科技有限公司
京公网安备 11011402011233号    京ICP备18060230号-3    营业执照    经营许可证:京B2-20212637