当前位置: 首页 > news >正文

江阴做网站优化做网站需要具备的基础条件

江阴做网站优化,做网站需要具备的基础条件,网页设计期末作业模板,网页设计制作网站图片简介: MaxCompute支持QUALIFY语法过滤Window函数的结果,使得查询语句更简洁易理解。Window函数和QUALIFY语法之间的关系可以类比聚合函数GROUP BY语法和HAVING语法。 MaxCompute(原ODPS)是阿里云自主研发的具有业界领先水平的分…

简介:  MaxCompute支持QUALIFY语法过滤Window函数的结果,使得查询语句更简洁易理解。Window函数和QUALIFY语法之间的关系可以类比聚合函数+GROUP BY语法和HAVING语法。

MaxCompute(原ODPS)是阿里云自主研发的具有业界领先水平的分布式大数据处理平台, 尤其在集团内部得到广泛应用,支撑了多个 BU 的核心业务。MaxCompute 除了持续优化性能外,也致力于提升 SQL 语言的用户体验和表达能力,提高广大 MaxCompute 开发者的生产力。

MaxCompute 基于 MaxCompute2.0 新一代的 SQL 引擎,显著提升了 SQL 语言编译过程的易用性与语言的表达能力。我们在此推出深入 MaxCompute 系列文章

第一弹 - 善用MaxCompute编译器的错误和警告
第二弹 - 新的基本数据类型与内建函数
第三弹 - 复杂类型
第四弹 - CTE,VALUES,SEMIJOIN
第五弹 - SELECT TRANSFORM
第六弹 - User Defined Type
第七弹 - Grouping Set, Cube and Rollup
第八弹 - 动态类型函数
第九弹 - 脚本模式与参数视图
第十弹 - IF ELSE分支语句

本文将介绍MaxCompute支持QUALIFY语法,QUALIFY语法支持指定过滤条件过滤窗口(Window)函数的结果,类似于HAVING语法处理经过聚合函数和GROUP BY后的数据。

QUALIFY功能简介

语法格式

QUALIFY [expression]

QUALIFY语法过滤Window函数的结果,Window函数和QUALIFY语法之间的关系可以类比聚合函数+GROUP BY语法和HAVING语法。
典型的查询语句的执行顺序如下:

  1. FROM
  2. WHERE
  3. GROUP BY和Aggregation Function
  4. HAVING
  5. WINDOW
  6. QUALIFY
  7. DISTINCT
  8. ORDER BY
  9. LIMIT

通常在一个查询语句中QUALIFY语法的执行顺序在WINDOW函数之后,用于对窗函数处理后的数据进行筛选。

使用场景

需要对Window函数的结果进行过滤,没有QUALIFY语法前,一般是在FROM语句中使用SubQuery,并通过WHERE条件来配合实现过滤。如下:

SELECT col1, col2
FROM
(
SELECT
t.a as col1,
sum(t.a) over (partition by t.b) as col2
FROM values (1, 2),(2,3),(2,2),(1,3),(4,2) t(a, b)
)
WHERE col2 > 4;

改写后的查询语句:

SELECT 
t.a as col1, 
sum(t.a) over (partition by t.b) as col2 
FROM values (1, 2),(2,3),(2,2),(1,3),(4,2)  t(a, b) 
QUALIFY col2 > 4;

也可以不使用别名,直接对Window函数进行过滤。

SELECT t.a as col1,
sum(t.a) over (partition by t.b) as col2
FROM values (1, 2),(2,3),(2,2),(1,3),(4,2) t(a, b)
QUALIFY sum(t.a) over (partition by t.b)  > 4;

QUALIFY和WHERE/HAVING的使用方法相同,只是执行顺序不同,所以QUALIFY语法允许用户写一些复杂的条件,比如:

SELECT *
FROM values (1, 2) t(a, b)
QUALIFY sum(t.a) over (partition by t.b)  IN (SELECT a FROM t1)

QUALIFY执行于窗口函数生效后,下面一个较复杂的例子可以直观的感受QUALIFY语法的执行顺序:

SELECT a, b, max(c)
FROM values (1, 2, 3),(1, 2, 4),(1, 3, 5),(2, 3, 6),(2, 4, 7),(3, 4, 8) t(a, b, c)
WHERE a < 3
GROUP BY a, b
HAVING max(c) > 5
QUALIFY sum(b) over (partition by a) > 3; 
--+------------+------------+------------+
--| a          | b          | _c2        |
--+------------+------------+------------+
--| 2          | 3          | 6          |
--| 2          | 4          | 7          |
--+------------+------------+------------+

示例

row_number窗口函数示例,将所有职工根据部门(deptno)分组(作为开窗列),每个组内根据薪水(sal)做降序排序,获得职工在自己组内的序号,若需要查询每个部门薪水top 3的信息,则实现如下

  • 数据准备

    create table if not exists emp(empno string,ename string,job string,mgr string,hiredate string,sal string,comm string,deptno string);
    
    insert into table emp values
    ('7369','SMITH','CLERK','7902','1980-12-17 00:00:00','800','','20')
    ,('7499','ALLEN','SALESMAN','7698','1981-02-20 00:00:00','1600','300','30')
    ,('7521','WARD','SALESMAN','7698','1981-02-22 00:00:00','1250','500','30')
    ,('7566','JONES','MANAGER','7839','1981-04-02 00:00:00','2975','','20')
    ,('7654','MARTIN','SALESMAN','7698','1981-09-28 00:00:00','1250','1400','30')
    ,('7698','BLAKE','MANAGER','7839','1981-05-01 00:00:00','2850','','30')
    ,('7782','CLARK','MANAGER','7839','1981-06-09 00:00:00','2450','','10')
    ,('7788','SCOTT','ANALYST','7566','1987-04-19 00:00:00','3000','','20')
    ,('7839','KING','PRESIDENT','','1981-11-17 00:00:00','5000','','10')
    ,('7844','TURNER','SALESMAN','7698','1981-09-08 00:00:00','1500','0','30')
    ,('7876','ADAMS','CLERK','7788','1987-05-23 00:00:00','1100','','20')
    ,('7900','JAMES','CLERK','7698','1981-12-03 00:00:00','950','','30')
    ,('7902','FORD','ANALYST','7566','1981-12-03 00:00:00','3000','','20')
    ,('7934','MILLER','CLERK','7782','1982-01-23 00:00:00','1300','','10')
    ,('7948','JACCKA','CLERK','7782','1981-04-12 00:00:00','5000','','10')
    ,('7956','WELAN','CLERK','7649','1982-07-20 00:00:00','2450','','10')
    ,('7956','TEBAGE','CLERK','7748','1982-12-30 00:00:00','1300','','10')
    ;
    
  • 在FROM语句中使用SubQuery,并通过WHERE条件来配合实现过滤,如下:

    SELECT  a.*
    FROM    (SELECT  deptno,ename,sal,ROW_NUMBER() OVER (PARTITION BY deptno ORDER BY sal DESC ) AS numsFROM    emp) a
    WHERE a.nums<=3
    ;
    
  • 通过QUALIFY实现如下:

    SELECT  deptno,ename,sal,ROW_NUMBER() OVER (PARTITION BY deptno ORDER BY sal DESC ) AS nums
    FROM    emp
    QUALIFY nums <= 3
    ;
    

结果均如下图,但是使用QUALIFY会使得查询语句更简洁易理解。
image.png

注意事项

  • QUALIFY语法需要查询语句里面至少一个Window函数,在没有Window函数的情况下使用QUALIFY语法会报错:FAILED: ODPS-0130071:[3,1] Semantic analysis exception - use QUALIFY clause without window function。错误示例如下。

    SELECT * 
    FROM values (1, 2) t(a, b) 
    QUALIFY a > 1;
    
  • QUALIFY语法中允许用户使用SELECT中列的别名作为过滤条件的一部分,示例如下。

    SELECT 
    sum(t.a) over (partition by t.b) as c1 
    FROM values (1, 2) t(a, b) 
    QUALIFY c1 > 1;
    
http://www.yayakq.cn/news/202875/

相关文章:

  • 申请自己的网站建筑设计软件有哪些软件
  • 建设企业网站的需要多长时间镇江网站建设方式优化
  • 查看网站点击量知乎网站内容建设的逻辑
  • 网站按城市做分站阿里云网站建设需要多少钱
  • 自己做培训需要网站吗网络销售培训学校
  • 深圳做网站排名中讯高科网站建设
  • 如何做监控网站wordpress网站用户注册
  • php做网站主要怎么布局哈尔滨网站设计
  • 网络营销的方法有哪些?seo网站优化经理
  • 网站开发kxhtml义乌建设公司网站
  • 网站分为哪几种类型天睦和生态建设有限公司网站
  • 住房城乡建设部门户网站烟气脱硫昆明长尾词seo怎么优化
  • asp net mvc做网站一级造价工程师报名时间
  • 百度一下百度搜索网站网站维护要多久
  • 企业建站一条龙互联网哪个专业前景好
  • 推广企业网站最主要的方式是网站平台建设方案书
  • 建个网站在哪备案常州自助建站seo
  • 怎么学习建设网站抖音关键词seo系统
  • dz整站免费网站建设研究院网站建设方案
  • 怎么在云主机上做网站手机网站设计立找亿企邦
  • 校园网站cms聊城网站建设招聘
  • 新手学做网站教程网套加工机器设备
  • dede网站模板 音响网站推广优化趋势
  • 猎头网站怎么做做网站要什么语言
  • 石家庄知名网站建设网站开发和系统开发区别
  • 浙江省住房和城乡建设局网站手机网页qq登录
  • 响应式网站建设好么网络服务器的作用
  • 做资源网站违法吗临沂地区建站网站
  • 北京网站制作公司电话重庆未来科技网站建设
  • 龙岗网站建设网站排名优化ic商城网站建设