今天就来和大家详细讲讲group by和window function,长文预警:
💡图一:
group by的功能有点类似于Excel里面的pivot table,是根据某一个或某几个column进行分组计算结果,比如根据table中客户的年龄算出每个年龄段分别有多少用户
group by写在where和order by之间(这三个statement都是optional,需要用就写,不需要就不写。SQL里select和from命令是必须写的)
⚠️如果需要group by多个column,中间需用逗号隔开,比如group by column 1,column 2,........ (这点和order by一样)
🌰1: 根据country进行分组,计算每个国家分别有多少个客户
🌰2: 和上个例子一样,只不过结尾加了个order by,结果显示为客户由多到少排序(因为order by后面用了desc)
💡图二💡图五💡图六:
这几个属于aggregate function,是window function的一种
COUNT():
🌰1: 在products table中算出一共有多少件产品(结果如图三)
🌰2: 在products table中,根据每种category算出各有多少件产品(结果如图四)
⚠️这两个query的结果是不同的,一个是所有产品总数量,一个是每种产品的总数量,所以🌰2要在最后加上group by
⚠️只要select里不是只出现aggregate function(如图四)其余出现过的column都要被group by,否则SQL会报错
💡图五:
AVG():
🌰1: 算出所有产品的平均价格
🌰2: 算出每个category的平均价格,因为avg后面还有一个categoryID
💡图六:
SUM():
🌰1: 算出所有订单一共卖出多少件产品
🌰2: 每种产品各卖出多少件,其实这个例子后面还可以接order by sum(Quantity) ASC/DESC,这样的排序会方便部门,比如marketing部门知道哪些产品卖出的多哪些产品少,从而制定相应的销售策略
aggregate function还包括min(), max(),是找出最小、最大值,用法和前面例子一样,这里不多做赘述了
这篇发的有点长,因为想尽可能把所有知识点讲清楚。如果有哪里没解释清楚,欢迎小伙伴们来提问!❤️❤️❤️❤️
最新评论 2
:👏👍
:谢谢Mia每次都这么捧场!爱你爱你😘