第一部分:初试集合思维
1.场景与需求
我们有如下的一列价格数据,现在有这样一个需求,对其实现RANK()排序:
2.SQL实现:
我先展示代码:
查询结果如下:
3.SQL解读:
现在返回头看代码,括号中的SQL是计算rank排名的核心,也是面向集合思维的运用,我们用一张图来展示一下:
同理若要实现DENSE_RANK(),仅仅修改一处即可,即:count(distinct P2.price),大家可以自己实际操作一下。
第二部分:再进一步,实现开窗
1.场景与需求:
我们对上一个场景的表进行修改,增加一个产品名称字段,展示出产品的历史价格记录(此处省去时间字段,大家领会精神就好...)。
我们现在针对产品名称进行组的划分,然后计算组内的Rank排名。
2.SQL实现(关联子查询):
我先展示代码:
查询结果如下:
3.SQL解读:
增加的"P1.name = P2.name"条件,将集合内部进行分组,产生如下效果:
[[产品1集合],[产品2集合],[产品3集合],[产品4集合]]
总结:
本文仅是面向集合思维编写SQL的冰水一角,面向集合的思维,让SQL处理数据不仅仅局限于行列之间。
/*原创,转载请联系!*/