Order Query

Online Compiler

Customers

customerid

country

Orders

orderid

customerid

Orderdetails

orderid

productid

quantity

Products

productid

categoryid

price

Categories

categoryid

categoryname

这里,如果sum所有的null就是null,如果count所有的null是0,但average了还是null

如果两个都改成inner join,那么就只有4行,因为0的行不会出现。面试题:你用了inner join,那么如果你用left join会如何?

如果只是第二个改成inner join,效果一样的,4行

注意groupby和orderby的顺序

这里还要注意where的顺序,因为ROM-->WHERE-->GROUP BY-->HAVING-->SELECT-->ORDER BY 所以WHERE要在FROM的都执行完了才会执行

这里要注意,orderid在每个表格里不是distinct的,因为orders里,同一个customerid会买很多单,而orderdetails是按照单个商品分的,所以不管用这两个的哪个表格,在除的时候都需要distinct. 还要注意,SQL里的除法最好都写成case when的形式,因为不知道什么时候分母就是0或者null或者负数了。

这里需要注意的是,尽管最后不需要call function fun,也需要给from后面的这一大块一个alias。

Last updated