作业准备
项目地址:Homework #1 - SQL。
准备工作:阅读 Chapters 1-2 27 3-5,学习 Lecture #01 #02,以及阅读课堂笔记。
Q1 [0 points] (q1_sample):
Ctrl + C,Ctrl +V。
Q2 [5 points] (q2_not_the_same_title):
查询只涉及 titles
表,比较简单。
1 | SELECT |
Q3 [5 points] (q3_longest_running_tv):
题目描述很不清晰啊,类型都不知道具体是什么。
1 | SELECT |
Q4 [10 points] (q4_directors_in_each_decade):
唯一要注意的就是使用 DISTINCT
。
1 | SELECT |
Q5 [10 points] (q5_german_type_ratings):
德语的缩写是 de
。
1 | SELECT |
Q6 [10 points] (q6_who_played_a_batman):
坑点就是模糊查询时 Batman
两边要加上双引号,即 "Batman"
。以及在连接 people
和 crew
表时,顺序很重要,如果使用 crew INNRE JOIN people USING(person_id)
会很慢(查询大概有 5 秒),具体不知道为什么,以下是它们的执行计划。
1 | crew INNER JOIN people USING(person_id) |
1 | WITH t AS ( |
Q7 [15 points] (q7_born_with_prestige):
SQL 很容易写,但是性能和官解差两秒,等以后学习怎么优化再来看吧。
1 | SELECT |
1 | QUERY PLAN |
Q8 [15 points] (q8_directing_rose.sql):
比官解快一秒。注意使用 Rose%
而不是 Rose %
。
1 | SELECT |
Q9 [15 points] (q9_ode_to_the_dead):
这就是窗口函数么,学习了。
1 | WITH t AS ( |
Q10 [15 points] (q10_all_played_by_leo):
不会。。json_each
函数有点神奇,也看了下递归 CTE 的实现,只能说真想不出来。
1 | WITH t1(characters) AS ( |
作业小结
最难的是最后两题,前面几题还可以接受。因为比较在意连接顺序对查询性能的影响,所以多花了点时间。(虽然还没弄明白就是了)