今天还准备了一个齐码的实例 为大家进行进行sql的讲解
案例要求:(表的话就不发了 大家学习即可 如果有需要 私信我)
Shop_stock表中字段说明:
UNITCODE:公司编码
STORE_CODE:店铺编码
CUSTOMER_TYPE:直营/加盟
PRODUCT_NO:货号
YEAR_CODE:款龄
DALEI:大类
MANUAL_SIZE_NO:尺码
SIZE_SORT:尺码排序号
COLOR_CODE:色号
COLOR_NAME:颜色名称
NUM:库存数量
Shop_stock表数据如下
首先我们先介绍几个sql方法:
LAG()和LEAD()统计函数可以在一次查询中取出同一字段的前N行的数据和后N行的值。这种操作可以使用对相同表的表连接来实现,不过使用LAG和 LEAD有更高的效率。
举lag()语法(lead相仿)
lag(arg1,arg2,arg3): arg1是从其他行返回的表达式 arg2是希望检索的当前行分区的偏移量。是一个正的偏移量,是一个往回检索以前的行的数目。 arg3是在arg2表示的数目超出了分组的范围时返回的值。
over(partition by columnname1 order by columnname2) 含义:按columname1指定的字段进行分组排序,或者说按字段columnname1的值进行分组排序。其中PARTITION BY 为分组字段,ORDER BY 指定排序字段
根据题目要求:
同一个货号,色号下连续3个尺码有库存,就算齐码。
那么我们只要保证同一个货号色号组内 3个连续尺码都存在 那么就证明其为齐码 然后给他设置一个flag即可
那么 我们就可以用over(partition by 货号,色号 order by 尺码)这样就可以将同组色号货号放在一起 然后按照尺码进行排序
排序完毕后,就要证明其连续3个尺码是否都有存库呢?
所以我们就可以用到 lead 和lag方法 我们取一个size 对其进行 判断 lead()-size = size-lag() = 1 那么就可以证明其存在连续3个尺码 那么也就证明其是齐码
sql代码如下
运行结果如下(1代表齐码 反之)
希望这篇博客 对大家理解sql一些方法有帮助~~~~~