用AI辅助写SQL

admin12个月前ChatGPT252

   我以前公司有个员工小崔,大家喜欢叫他"崔导",刚开始以为是"导演",觉得他很牛逼,很长一段时间,他都是我心中的SQL大神,结果后面才知道,他是经常手动写SQL,帮业务部门的同事导出数据,次数多了,所以别人都叫他"崔导"。


    可想而知,这名员工小崔,在写SQL上必定花了大量的时间,特别是遇到多表查询的复杂SQL,可能一个SQL要写几百行甚至更多。到这里很多人预计都想到了,这个工作繁琐而费事,我们需要想办法提升效率,第一时间我们可能会想到把数据导出做成功能? 但临时的数据导出总避免不了,我们只需要找到一个快速写SQL的办法,是不是也可以解决这种问题了? 这里我们就不得不提到AI了,我们完全可以利用AI来帮我们写一些SQL,提升写SQL的效率。


下面我通过一些示例,来演示一下如何用ChatGPT为我们写SQL。


示例一:  日常SQL需求实现,如: "查询最近连续三天登录的用户"


   可以看到,这个需求虽然比较简单,但对应的SQL却也有一定的复杂度,如果让我们自己写,你需要花多长时间呢? 反正我用ChatGPT只用了30秒不到,是不是很强大?  而且ChatGPT还会把实现的思路及原理一一列出,我们只需要把对应的字段或者表,改为我们系统中实际存在的信息即可,对于不熟悉SQL的人来说,不仅可以利用ChatGPT解决问题,同时还可以学习SQL语法,简直是"天上掉下的馅饼"一样美滋滋。


   相信职场这对于SQL大神来说,这个SQL简直就是过家家一样简单,而且还有查询性能优化的空间,如果你不知道如何优化怎么办? 很简单,我们继续问ChatGPT就行。


示例二: 利用ChatGPT为我们优化SQL性能


以下是ChatGPT的回答:


1.索引:为login_records表中的user_id和login_date列创建索引可以提高查询的性能。


2.子查询优化:可以将最近三天的登录记录的查询结果存储在一个临时表中,并且使用该临时表作为主查询的基础。这可以避免在主查询中重复执行子查询,提高查询的效率。


3.按照登录日期排序:可以通过将子查询的ORDER BY子句更改为ORDER BY user_id, login_date DESC,以便根据登录日期的降序排序。这将使主查询中的日期计算更高效,因为连续的日期会更快地出现在前面。


以下是一个优化过的 SQL 查询:


-- 创建临时表
CREATE TEMPORARY TABLE temp_login_records AS
SELECT user_id, login_date
FROM login_records
WHERE login_date >= DATEADD(day, -2, GETDATE())
ORDER BY user_id, login_date DESC;
-- 查询最近连续三天登录的用户
SELECT user_id
FROM (
SELECT
user_id,
login_date,
ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY login_date DESC) AS rn
FROM temp_login_records
) AS t
GROUP BY user_id, DATEADD(day, -rn, login_date)
HAVING COUNT(*) >= 3;
-- 删除临时表
DROP TABLE temp_login_records;



   这个查询使用了临时表,并在子查询中按照user_id和login_date列排序。在主查询中,我们按照login_date的降序排序,以便更高效地计算连续的日期。最后,我们删除了临时表以释放资源。


   请注意,这个优化过的查询可能需要根据具体情况进行调整。例如,你可能需要更改临时表的名称、更改日期范围、更改表和列名等。


   这个是不是一招解决了SQL大神帮我们优化性能的问题? 虽然可能跟我们预期的并不一定一致,但我们起码知道的是,ChatGPT会提出优化的建议,我们可以在他的基础之上进行修改,或者让他继续优化


如,我们继续问ChatGPT能否继续优化?



最终生成的SQL如下:


-- 创建日期范围索引
CREATE INDEX ix_login_date ON login_records (login_date);
-- 查询最近连续三天登录的用户
SELECT user_id
FROM (
SELECT
user_id,
login_date,
ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY login_date DESC) AS rn
FROM login_records
WHERE login_date >= DATEADD(day, -2, GETDATE())
) AS t
GROUP BY user_id, DATEADD(day, -rn, login_date)
HAVING COUNT(*) >= 3;
-- 删除日期范围索引
DROP INDEX ix_login_date;

   可以看到,只要我们继续向ChatGPT提出要求,它基本都会给出对应的答复,直到我们满意为止,当然对于如何更准确表达自己的问题,就得去学习了解一下prompt了,这里就不做介绍了。


   怎么样,如果学会了上面这几招,如果老板发现了,"崔导"是不是有被优化的可能了?我们只需要把自己的要查询的数据,准确的传达给ChatGPT,让它帮我们生成SQL,如果不满意,还可以让它继续优化,直到我们满意为止,还等什么? 赶紧把ChatGPT用起来吧!





相关文章

用AI处理Excel,提升效率(1)

用AI处理Excel,提升效率(1)

Excel是微软出品,办公必备软件,我们经常用Excel统计或者分析数据。Excel功能强大,但是要用好Excel,也是要付出学习成本的。今天,我们就来教大家怎么用New Bing/ChatGPT/Z...

如何用ChatGPT做PPT

如何用ChatGPT做PPT

前言在当今快节奏的工作环境中,时间就是金钱。为了提高效率,人们不断寻找创新的工具和方法。在这篇文章中,我们将探讨如何将两个强大的工具——ChatGPT 与 MindShow 结合使用,以高效地生成 P...

百度问答变现实战

大家好我叫阿国,90后连续创业者,2017年抓住app流量风口和朋友一起做项目赚到第一桶金, 这个app项目上赚到500万,2018年靠自己在杭州买房。作为一名互联网创业者,感知到ai行业的风口...

4个实战场景搞定99%职场写作

4个实战场景搞定99%职场写作

“辛苦的一天终于结束了,日报还不放过我。记录重复性劳动说敷衍,写不好约等于没干活。”“开个会东讲一句西讲一句,会后需要快速同步会议重点和结论,一着急就写成没有逻辑的流水账。”“要写邮件催一下甲方,写了...

集成ChatGPT到IPhone

集成ChatGPT到IPhone

注意注意!!! 这是无需任何技术基础都能做到的小白教程!!!!今天将带大家将ChatGPT集成到IPhone。在开始之前先问问大家。平常你会怎么用ChatGPT?打开电脑,登录官网?苹果系统集成Cha...