
我尝试了ChatGPT一段时间之后,然后我想知道:ChatGPT可以做我的工作吗?它能比我做得还好?
我有2年的数据分析师的工作经验,擅长写sql。那么和ChatGPT相比,谁写的SQL更好呢?
(资料图片仅供参考)
我以3个LeetCode的SQL挑战题为准(一个简单,两个中等)。我会先写出一个解决方案,然后把题发给ChatGPT,最后对比下,看看哪个解决方案效果最好。
题目1(简单)
题目为:订单最多的客户
下面是我写的sql
WITH layer_1 AS ( SELECTcustomer_number, COUNT(DISTINCT order_number) AS order_number FROM orders GROUP BY customer_number)SELECT customer_number FROM layer_1ORDER BY order_number DESC LIMIT 1
下面是通过运行的时间:
现在让我们来看看ChatGPT是怎么回答这个问题的,
以下是ChatGPT的答案:
ChatGPT甚至解释了它做了什么。我觉得这个查询的可读性很强,写的比较规范。让我们看看它的表现如何。它可以执行,但比我的结果要慢。虽然我很高兴能比ChatGPT做得更好,但我很想知道我如何能改进这个查询。
题目2 (中等)
这个题目是“树形节点”
我写的第一个查询是这个:
# Write your MySQL query statement belowWITH l1 AS (SELECTt.id,c.id AS c_id,t.p_idFROM Tree tLEFT JOIN Tree cON c.p_id = t.id), l2 AS (SELECTid,COUNT(DISTINCT c_id) AS nb_childrens,COUNT(DISTINCT p_id) AS nb_parentsFROM l1GROUP BY id)SELECT id,CASEWHEN nb_childrens >0 AND nb_parents >0 THEN "Inner"WHEN nb_childrens >0 THEN "Root"ELSE "Leaf"END AS typeFROM l2
我在提交之前运行了下,结果出错了(狗头)......
事实证明,我对这些例子没有细心观看思考,尤其是第二个例子:
当一个节点既是叶子又是根时,应该输出为根。我把我的CASE WHEN的顺序改成这样:
CASEWHEN nb_childrens >0 AND nb_parents >0 THEN "Inner"WHEN nb_parents >0 THEN "Leaf"ELSE "Root"END
然后sql执行通过了,执行结果如下,162ms:
轮到ChatGPT了,下面是给出的sql,
执行时间为170ms
ChatGPT 给出的sql执行结果与我写的sql结果是一致的,缺点是:我写的sql更长,优点是时间上会稍微比ChatGPT的短一些。
题目3 (中等)
这个题目是“股票的资本损益”
下面的sql是我写的:
SELECT stock_name, SUM(CASEWHEN operation = "Buy" THEN -1*priceELSE priceEND) AS capital_gain_lossFROM StocksGROUP BY stock_name
执行是通过了,但是时间比较长
让我们看看ChatGPT给的答案
这一次,ChatGPT和我使用了类似的结构,查询也通过了.
可以说,这次挑战是ChatGPT赢了,响应速度更快,代码相对更简洁,性能上可能会差一丢丢,但是只要把问题描述的足够清晰,ChatGPT能很快给出答案。
但是ChatGPT仍然会出错,如果业务背景没有描述清晰的话。
最后,我问了ChatGPT一个问题:
总结:
总的来说,ChatGPT的表现优点超乎我的意料,它学习能力强,能纠错。但是业务能力是欠缺的,如果问题描述的不精确,结果可能会相差很大。
关键词: