尝试使用chatgpt帮我优化sql

尝试写一些sql看看chatgpt写的和自己写的哪里不一样,帮助我打开思路。

第一题

数据库中有个员工表emp,建表语句如下:
create table emp_his (emp_id number, emp_name varchar(50));
表中存在重复记录(根据emp_id来判断),用SQL如何查出存在重复的 emp_id?

我给出的sql如下

select emp_id, count(1) as cnt 
from emp_his 
group by emp_id 
having 	count(1) >= 2;

将题目丢入chatgpt中给出的结果如下

SELECT emp_id
FROM emp_his
GROUP BY emp_id
HAVING COUNT(emp_id) > 1;

可以看出几乎是一样的,但是还是想问问它我的答案是否有优化的空间。

于是乎它说我的语句已经很不错了,再想优化就是添加索引了
在这里插入图片描述

第二题

有张student_scores表,存放每个学生,每门课程的分数,建表语句如下:
create table student_scores
(emp_id number
,course_name varchar(50)
,score number);
需要把每门课程按照学生分数降序排名并添加序号。

还是先把自己的写好的sql拿出来

尝试写一些sql看看chatgpt写的和自己写的哪里不一样,帮助我打开思路。

第一题

数据库中有个员工表emp,建表语句如下:
create table emp_his (emp_id number, emp_name varchar(50));
表中存在重复记录(根据emp_id来判断),用SQL如何查出存在重复的 emp_id?

我给出的sql如下

select emp_id, count(1) as cnt 
from emp_his 
group by emp_id 
having 	count(1) >= 2;

将题目丢入chatgpt中给出的结果如下

SELECT emp_id
FROM emp_his
GROUP BY emp_id
HAVING COUNT(emp_id) > 1;

可以看出几乎是一样的,但是还是想问问它我的答案是否有优化的空间。

于是乎它说我的语句已经很不错了,再想优化就是添加索引了

在这里插入图片描述

第二题

有张student_scores表,存放每个学生,每门课程的分数,建表语句如下:
create table student_scores
(emp_id number
,course_name varchar(50)
,score number);
需要把每门课程按照学生分数降序排名并添加序号。

还是先把自己的写好的sql拿出来

select emp_id, course_name, score, 
	  row_number() over(order by score desc) as row_num 
from student_scores 
order by score desc;

再看看chatgpt给出的结果

SELECT emp_id, course_name, score,
       ROW_NUMBER() OVER (PARTITION BY course_name ORDER BY score DESC) AS ranking
FROM student_scores;

可以看出chatgpt忽略了题目中的“需要把每门课程按照学生分数降序排名并添加序号”要求的是每门成绩而不是各科成绩排序。
当我将我的答案输入进后,chatgpt立刻就做出了修改

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bBwZjNP6-1688713220935)(https:img-blog.csdnimg.cn/5a112e499d0944cb8dcf8724d890c273.png)]

尝试写一些sql看看chatgpt写的和自己写的哪里不一样,帮助我打开思路。

第一题

数据库中有个员工表emp,建表语句如下:
create table emp_his (emp_id number, emp_name varchar(50));
表中存在重复记录(根据emp_id来判断),用SQL如何查出存在重复的 emp_id?

我给出的sql如下

select emp_id, count(1) as cnt 
from emp_his 
group by emp_id 
having 	count(1) >= 2;

将题目丢入chatgpt中给出的结果如下

SELECT emp_id
FROM emp_his
GROUP BY emp_id
HAVING COUNT(emp_id) > 1;

可以看出几乎是一样的,但是还是想问问它我的答案是否有优化的空间。

于是乎它说我的语句已经很不错了,再想优化就是添加索引了
在这里插入图片描述

第二题

有张student_scores表,存放每个学生,每门课程的分数,建表语句如下:
create table student_scores
(emp_id number
,course_name varchar(50)
,score number);
需要把每门课程按照学生分数降序排名并添加序号。

还是先把自己的写好的sql拿出来

select emp_id, course_name, score, 
	   row_number() over(order by score desc) as row_num 
from student_scores 
order by score desc;

再看看chatgpt给出的结果

SELECT emp_id, course_name, score,
       ROW_NUMBER() OVER (PARTITION BY course_name ORDER BY score DESC) AS ranking
FROM student_scores;

可以看出chatgpt忽略了题目中的“需要把每门课程按照学生分数降序排名并添加序号”要求的是每门成绩而不是各科成绩排序。
当我将我的答案输入进后,chatgpt立刻就做出了修改
在这里插入图片描述

() over(order by score desc) as row_num
from student_scores
order by score desc;

再看看chatgpt给出的结果

```sql
SELECT emp_id, course_name, score,
       ROW_NUMBER() OVER (PARTITION BY course_name ORDER BY score DESC) AS ranking
FROM student_scores;

可以看出chatgpt忽略了题目中的“需要把每门课程按照学生分数降序排名并添加序号”要求的是每门成绩而不是各科成绩排序。
当我将我的答案输入进后,chatgpt立刻就做出了修改
在这里插入图片描述

第三题

有表emp_his,表emp_inc,表结构一样,关联条件是emp_id,建表语句如下:
create table emp_his
(emp_id number,emp_name varchar(50),age number);
create table emp_inc
(emp_id number,emp_name varchar(50),age number);
emp_his表存放历史数据,emp_inc表存放有变化,或者新增的数据,如果要一个最新的全量数据sql如何写?

还是先将自己写的放出来

select
  case when inc.emp_id is not null then inc.emp_id else his.emp_id
 ,case when inc.emp_name is not null then inc.emp_name else his.emp_name
 ,case when inc.age is not null then inc.age else his.age
from emp_his his full outer join emp_inc inc ON his.emp_id = inc.emp_id;

chatgpt给出的结果如下

SELECT emp_id, emp_name, age
FROM emp_his
UNION ALL
SELECT emp_id, emp_name, age
FROM emp_inc;

看见union all的时候感觉好像是自己把问题想的复杂了,但是还是想让他帮我优化一下我写的sql。
优化原因以及结果如下
在这里插入图片描述
这道题确实可以用COALESCE()来做,看起来逻辑也会更加清晰。

总结:

chatgpt可以用来做一些基础的优化,但是也可能给出的结果是不正确的,正确合理的使用AI才能提升工作以及学习的效率。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值