oracle的开窗函数
开窗函数指的是OVER(),和说明函数共同行使。 语法: OVER(PARTITION BY 分组字段 ORDER BY 排序字段 ROWS BETWEEN 排序字段范畴值1 AND 排序字段范畴值2) 语法声名:开窗函数为说明函数带有的,包括三个说明子句: ROWS 有多个范畴值: 示例1: SELECT CCTI.CTR_TYPE_ID,CCTI.ORDER_NUM,CCTI.NAME,WMSYS.WM_CONCAT(CCTI.NAME) OVER (PARTITION BY CCTI.CTR_TYPE_ID) CTR_TYPE_ITEM_STR FROM T_CTRG_CTR_TYPE_ITEM CCTI; 功效1: 说明1: 区别于GROUP BY子句的只返回分组行的功效,开窗函数每一行城市返回一个功效。 示例1的写法相等于指定了ROWS范畴从不限制先前行到不限制跟从行(默认): SELECT CCTI.CTR_TYPE_ID,WMSYS.WM_CONCAT(CCTI.NAME) OVER (PARTITION BY CCTI.CTR_TYPE_ID ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) CTR_TYPE_ITEM_STR FROM T_CTRG_CTR_TYPE_ITEM CCTI; 示例2: SELECT CCTI.CTR_TYPE_ID,WMSYS.WM_CONCAT(CCTI.NAME) OVER (PARTITION BY CCTI.CTR_TYPE_ID ORDER BY CCTI.ORDER_NUM) CTR_TYPE_ITEM_STR FROM T_CTRG_CTR_TYPE_ITEM CCTI; 功效2: 说明2: 加上了ORDER BY 之后,返回功效酿成了逐级递增的结果。 写法相等于指定了ROWS范畴从不限制先前行到当前行(加了ORDER BY默认): SELECT CCTI.CTR_TYPE_ID,WMSYS.WM_CONCAT(CCTI.NAME) OVER (PARTITION BY CCTI.CTR_TYPE_ID ORDER BY CCTI.ORDER_NUM ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) CTR_TYPE_ITEM_STR FROM T_CTRG_CTR_TYPE_ITEM CCTI; 出格声名:假如SQL语句中存在ORDER BY语句(非开窗函数中的说明子句),会再说明函数说明竣事后再执行排序,优先级低于说明子句。 后话: 由于开窗函数每一行城市返回一个功效,以是要取分组功效的话,可以在语句加上DISTINCT修饰即可返回分组功效(分组功效内有排序)。 语句: SELECT DISTINCT CCTI.CTR_TYPE_ID,WMSYS.WM_CONCAT(CCTI.NAME) OVER (PARTITION BY CCTI.CTR_TYPE_ID ORDER BY CCTI.ORDER_NUM ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) CTR_TYPE_ITEM_STR FROM T_CTRG_CTR_TYPE_ITEM CCTI; 功效: ? "人生中最让人疾苦的,不在于【得不到】,而在于【我原来可以】。" (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |