MaxCompute SQL示例解析
介绍MaxCompute SQL常见使用场景,掌握SQL的写法。

准备数据集
本文以emp表和dept表为示例数据集。您可以自行在MaxCompute项目上创建表并上传数据。
emp.csv中数据如下
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

创建emp表。

CREATE TABLE IF NOT EXISTS emp (
EMPNO STRING,
ENAME STRING,
JOB STRING,
MGR BIGINT,
HIREDATE DATETIME,
SAL DOUBLE,
COMM DOUBLE,
DEPTNO BIGINT);

dept表中的数据如下
10,ACCOUNTING,NEW YORK
20,RESEARCH,DALLAS
30,SALES,CHICAGO
40,OPERATIONS,BOSTON

创建dept表。

CREATE TABLE IF NOT EXISTS dept (
DEPTNO BIGINT,
DNAME STRING,
LOC STRING);
创建并导入表如下

SQL示例
示例1:查询员工人数大于零的所有部门。
为了避免数据量太大,此场景下建议您使用JOIN子句。
SELECT d.*
FROM dept d
JOIN (
SELECT DISTINCT deptno AS no
FROM emp
) e
ON d.deptno = e.no;

示例2:查询薪金比SMITH高的所有员工。
此场景为MAPJOIN的典型场景。
SELECT /*+ MapJoin(a) */ e.empno
, e.ename
, e.sal
FROM emp e
JOIN (
SELECT MAX(sal) AS sal
FROM emp
WHERE ENAME = ‘SMITH’
) a
ON e.sal > a.sal;

示例3:查询所有员工的姓名及其直接上级的姓名。
此场景为等值连接。
SELECT a.ename
, b.ename
FROM emp a
LEFT OUTER JOIN emp b
ON b.empno = a.mgr;

示例4:查询基本薪金大于1500的所有工作。
此场景下需要使用HAVING子句。
SELECT emp.JOB
, MIN(emp.sal) AS sal
FROM emp
GROUP BY emp.JOB
HAVING MIN(emp.sal) > 1500;

示例5:查询在每个部门工作的员工数量、平均工资和平均服务期限。
此场景为使用内建函数的典型场景。
SELECT COUNT(empno) AS cnt_emp
, ROUND(AVG(sal), 2) AS avg_sal
, ROUND(AVG(datediff(getdate(), hiredate, ‘dd’)), 2) AS avg_hire
FROM emp
GROUP BY DEPTNO;

示例6:查询每个部门的薪水前3名的人员的姓名以及其排序。
此场景为典型的Top N场景。

SELECT *
FROM (
SELECT deptno
, ename
, sal
, ROW_NUMBER() OVER (PARTITION BY deptno ORDER BY sal DESC) AS nums
FROM emp
) emp1
WHERE emp1.nums < 4;

示例7:查询每个部门的人数以及该部门中办事员(CLERK)人数的占比。
SELECT deptno
, COUNT(empno) AS cnt
, ROUND(SUM(CASE
WHEN job = ‘CLERK’ THEN 1
ELSE 0
END) / COUNT(empno), 2) AS rate
FROM EMP
GROUP BY deptno;

注意事项
使用GROUP BY时,SELECT部分必须是分组项或聚合函数。
ORDER BY后面必须加LIMIT N。
SELECT表达式中不能用子查询,可以改写为JOIN。
JOIN不支持笛卡尔积,可以使用MAPJOIN替代。
UNION All需要改成子查询的格式。
IN/NOT IN语句对应的子查询只能有一列,而且返回的行数不能超过1000,否则也需要改成JOIN操作执行

MaxCompute SQL示例解析相关推荐

  1. MaxCompute SQL原理解析及性能调优

    摘要: 分享内容 介绍了ODPS SQL的基于mapreduce是如何实现的及一些使用小技巧,回顾了mapreduce各个阶段可能产生的问题及相应的处理方法,同时介绍了一些应对数据倾斜的处理方法,最后 ...

  2. 基于MaxCompute SQL 的半结构化数据处理实践

    简介: MaxCompute作为企业级数据仓库服务,集中存储和管理企业数据资产.面向数据应用处理和分析数据,将数据转换为业务洞察.通过与阿里云内.外部服务灵活组合,可构建丰富的数据应用.全托管的数据与 ...

  3. 为了让开发者写MaxCompute SQL更爽,DataWorks 增强SQL 编辑器功能

    摘要: 众所周知,数据开发和分析的同学每天都要花大量时间写MaxCompute SQL:Dataworks作为数据开发的IDE直接影响着大家的开发效率,这次新上线的Dataworks我们在编辑体验上做 ...

  4. sql示例_PARSEONLY SQL命令概述和示例

    sql示例 This article explores the uses of the SET PARSEONLY SQL command for SQL Server queries. 本文探讨了S ...

  5. MaxCompute SQL大数据公开数据集实战

    MaxCompute公开数据集简介 目前阿里云MaxCompute已经免费向全部用户开放了多种公用数据集,包括: 股票价格数据 房产信息 影视及其票房数据 TPC-DS数据集 这些公开数据现已免费开放 ...

  6. MaxCompute SQL的SELECT语法

    MaxCompute SQL支持使用正则表达式select_expr选列. 使用正则表达式select_expr: SELECT `abc.*` FROM t;选出t表中所有列名以abc开头的列. S ...

  7. java聊天程序步骤解析_java网络之基于UDP的聊天程序示例解析

    基于UDP的Socket通信 UDP协议不是一种基于稳定连接的协议,是一种面向数据报包的通信协议,不需要通信双方建立稳定的连接,也没有所谓服务端和客户的概念,数据报包在传输的时候不保证一定及时到达,也 ...

  8. 《Oracle SQL疑难解析》——1.6 批量地从一个表中复制数据到另一个表

    本节书摘来自异步社区出版社<Oracle SQL疑难解析>一书中的第1章,第1.6节,作者: [美]Grant Allen , Bob Bryla , Darl Kuhn,更多章节内容可以 ...

  9. oracle 测试sql执行时间_通过错误的SQL来测试推理SQL的解析过程

    这是学习笔记的第 1977 篇文章 如果抛出一个问题,你是如何理解MySQL解析器的,它和Oracle解析器有什么差别?相信大多数同学都会比较迷茫,因为这个问题很难验证,要不是看源码,要不就是查看书上 ...

最新文章

  1. spark 数据存储
  2. .NET项目迁移到.NET Core操作指南
  3. pythonweb服务器怎么让别人访问_Django配置让其他电脑访问网站
  4. Java中的模板方法模式
  5. ios无痕埋点_掌握数据生命周期:初识数据埋点
  6. Android SDK Tools 历史版本下载
  7. mac的win10蓝牙鼠标问题
  8. 操作系统下spinlock锁解析、模拟及损耗分析
  9. V2X(二)GNSSPC5UU
  10. ACS 中PEAP的认证
  11. mysql语句总结_mysql语句总结
  12. 湿空气性质计算,随笔与学习记录 (5.空气比焓)
  13. 全能型终端神器——MobaXterm安装教程
  14. Spring面试题(2022最新版)
  15. VL6810X驱动 距离和光线传感器 stm32 HAL库
  16. VMware Workstation 16.2.5 Pro Unlocker OEM BIOS for Linux
  17. 继承QWidget使用QPainter自定义二维图形控件【Qt学习】
  18. 如何训练你的准确率?
  19. 论文实验图片局部放大工具(可批量操作)
  20. 凯利公式指导投资示例

热门文章

  1. 三、CRUD(增删改查)
  2. html source type mp4,html5 – 获取MediaSource.isTypeSupported的mime类型
  3. return int()函数 c++解说
  4. 创维E900V21E/E900V22E_S905L3B/S905L2B通刷_支持5621DS无线_完美语音线刷固件
  5. Django-rest-framework框架之APIView与序列化详解
  6. python识别颜色并提取轮廓_pythonopencv检测并提取目标颜色
  7. 作业二:词云制作 使用软件wordart
  8. Qlikview Data Modeling---创建一个Key/Link Table
  9. 重新启动遇到错误导致系统安装无法继续
  10. redis面试题(一)赋答案