翻译:陈之炎
校对:付文欣
本文约2500字,建议阅读5分钟
十个问题帮你测试出哪个AI助手能写出最佳的SQL代码。
4.2. 问题5:新用户计数提示:请帮我写一个SQL查询,计算每个月的首次用户数量。首次用户是指下第一个订单的用户。
GPT-4o、Claude 3.5 Sonnet和Gemini Advanced:所有三个AI助手都提供了正确的查询,获得了满分。
4.3. 问题6:最畅销的产品类别提示:请帮我写一个SQL查询,获取每个月总订单金额排名前5的热门产品类别。
GPT-4o、Claude 3.5 Sonnet和Gemini Advanced:所有三个AI助手都使用窗口函数,提供了正确的查询,获得了满分。
4.4. 问题7:留存率提示:请帮我写一个SQL查询,计算每个月的用户留存率。月份X的留存率 = 在月份X-1下过订单的用户中,也在X月份下过订单的用户数%。
GPT-4o:它提供了一个错误的答案。它的PreviousMonthUsers CTE和RetainedUsers CTE做了同样的事情……我两次指出它的错误才得到正确的答案。这里打0分。
Claude 3.5 Sonnet:它的初始解决方案也失败了,但比GPT更接近。它计算了当月有订单的用户总数。然而,我想要的分母是月份X-1有订单的用户。Claude在一次跟进后更正了代码,获得了0.5分。
Gemini Advanced:它在第一次尝试中也失败了。它没有按照我的要求计算留存率,即月份X和X-1都有订单的用户/月份X-1有订单的用户,而是做了月份X和X+1都有订单的用户/月份X有订单的用户。在一次跟进后,Gemini更正了代码并获得了0.5分。
第二轮回顾
在这一轮中,Claude 3.5 Sonnet以3.5分加上0.5额外分数领先。ChatGPT-4o得分3分,加上0.5额外分数,在创建和管理合成数据集方面表现出色。Gemini Advanced得分3.5分,它是唯一一个不能直接上传CSV文件的模型。
第二轮得分(图片由作者提供)
5. 第三轮:查询优化在这最后一轮中,我专注于查询优化技能,我使用了SQL优化文章中的低效代码示例,这些查询基于上述相同的四个假数据集。
5.1. 问题8:仅选择必要的列我期望:在窗口函数中选择必要的列,用比SELECT 更好的方法。
GPT-4o:它通过选择相关列并提供清晰的解释来优化查询,它还建议确保适当的索引以提高窗口函数的性能。给予满分。
Claude 3.5 Sonnet:Claude不仅选择了相关列,还使用了COALESCE(SUM(price), 0) AS first_order_amount来处理潜在的空值情况。给予满分。
Gemini Advanced:Gemini也通过选择相关列并提供索引建议来优化查询。给予满分。
5.2. 问题9:预聚合我的期望:鉴于users是一个具有许多列的宽表,最好先进行聚合计算first_order_amount,然后再连接到users表以获取所有列。
GPT-4o:最初,GPT-4o只更新了格式,并在users表中明确列出了列。在提示了users表的宽表性质后,它建议先进行预聚合,获得0.5分。
Claude 3.5 Sonnet:Claude建议预聚合,将大表连接移到最后一步进行优化,并提供了清晰的解释。给予满分。
Gemini Advanced:Gemini也建议预聚合,但查询有语法问题,它坚持认为查询是正确的……我非常困惑,所以我自己在Snowflake中测试了一个类似的查询(它抛出了语法错误:意外的‘GROUP’),并询问了ChatGPT和Claude。我95%确定你不能以这种方式在同一个CTE中使用QUALIFY和GROUP BY……鉴于这是一个语法错误,Gemini获得0分。但如果这在其他一些数据仓库中有效,请务必告诉我。
5.3. 问题10:去重我期望:该查询使用DISTINCT、UNION和ROW_NUMBER()进行去重,所有这三个操作成本都很高,并且是在做同样的事情,所以应消除重复的去重工作。
GPT-4o:它优化了代码,但改变了输出表结构。好吧,我想我没有明确说我需要相同的输出结构……在澄清后,它提供了具有正确列的优化代码。我在这里给它0.5分。
Claude 3.5 Sonnet:Claude提供了一个解决方案,将两个窗口函数CTE合并为一个,并使用CASE WHEN + WHERE rn_first=1 OR rn_last=1来获得相同结构的输出。老实说,我甚至没有想到这种方法。它再次获得满分。
Gemini Advanced:Gemini也将两个窗口函数合并为一个,但然后使用DISTINCT获取首次和最后一次订单ID。这需要两次表扫描,DISTINCT成本昂贵,所以在我看来它似乎不如Claude的解决方案有效。我给它0.5分。
第3轮回顾
在这一轮查询优化中,Claude 3.5 Sonnet是明显的赢家,三个问题都答对了,并且提供了创新的解决方案。ChatGPT-4o在两个问题上需要指导,但最终所有问题都回答正确,获得了2分。Gemini Advanced有一个语法错误,并产生了一个不太优化的代码,因此得到了1.5分。
第3轮得分(图片由作者提供)
6. 总结最终得分Final scores (图片由作者提供)
Claude 3.5 Sonnet (10 分)
Claude在SQL生成和优化方面表现最佳,最初只错了一个问题,但在澄清后很快纠正了。如果你正在寻找一个AI来协助SQL查询,我会100%推荐Claude。我还喜欢他们的用户界面,可以格式化文本输入以提高可读性。另一个我欣赏的功能是他们的“项目”功能——你可以设置自定义指令并在项目级别共享知识,这对于团队使用非常方便。然而,它的文件上传限制具有挑战性,如果你想与它共享真实数据集,他们能实际接受的文件大小远低于官宣的和ChatGPT允许的,可能是出于需求量比较高的原因,希望Claude能尽快改进这个功能。Claude项目(图片由作者提供)
GPT-4o (8 分)
GPT-4o能够编写语法正确的SQL,它在业务逻辑方面表现出色,但在查询优化方面落后。GPT-4o的一个显著优势是能够直接在用户界面中加载数据集并与它们互动,助力数据理解和探索——你可以在我的文章:(https://towardsdatascience.com/evaluating-chatgpts-data-analysis-improvements-interactive-tables-and-charts-622d3e5a3816)中了解更多关于这个功能的信息。它生成带有下载链接的合成数据集的能力也给人留下了深刻印象。Gemini Advanced (7分)
Gemini在所有三个类别中的性能都比Claude和ChatGPT差,但它仍然设法正确回答了70%的问题。能够搜索网站并提供参考链接是它的竞争优势。然而,根据上文的经验,链接有时是不相关的,或者与其回应不匹配,这破坏了回答的可信度。Gemini的另一个优势是它与Google套件其他产品集成。例如,可以在Google电子表格中打开它生成的数据集。7. 下一步是什么现在我们已经比较了SQL技能,接下来我计划评估下面这些数据科学技能。如果你有任何其他领域希望我一并评估的,请告诉我!
探索性数据分析(EDA)可视化机器学习文本分析数据科学商业案例对AI和数据科学感兴趣?这里有更多文章可以查看:
ChatGPT能否取代数据科学家?这是我的看法:
https://towardsdatascience.com/evaluating-chatgpt-in-data-science-churn-prediction-analysis-as-an-example-feec7edc23af
我对ChatGPT交互式表格和图表功能的评价:
https://towardsdatascience.com/evaluating-chatgpts-data-analysis-improvements-interactive-tables-and-charts-622d3e5a3816
如何使用OpenAI API进行文本分类和摘要?我的代码示例:
https://ydong029.medium.com/topic-summarization-and-categorization-with-gpt-717a40130d25
你听说过Google的新AI笔记本吗?在这里查看:
https://levelup.gitconnected.com/how-googles-powerful-ai-notebook-will-transform-your-research-and-learning-116e116db4e0
作者简介:
本文由Yu Dong撰写
1.8K关注者 · Towards Data Science撰稿人
Brex数据科学 | 数据故事讲述者