MaxCompute SQL示例解析
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示例解析相关推荐
- MaxCompute SQL原理解析及性能调优
摘要: 分享内容 介绍了ODPS SQL的基于mapreduce是如何实现的及一些使用小技巧,回顾了mapreduce各个阶段可能产生的问题及相应的处理方法,同时介绍了一些应对数据倾斜的处理方法,最后 ...
- 基于MaxCompute SQL 的半结构化数据处理实践
简介: MaxCompute作为企业级数据仓库服务,集中存储和管理企业数据资产.面向数据应用处理和分析数据,将数据转换为业务洞察.通过与阿里云内.外部服务灵活组合,可构建丰富的数据应用.全托管的数据与 ...
- 为了让开发者写MaxCompute SQL更爽,DataWorks 增强SQL 编辑器功能
摘要: 众所周知,数据开发和分析的同学每天都要花大量时间写MaxCompute SQL:Dataworks作为数据开发的IDE直接影响着大家的开发效率,这次新上线的Dataworks我们在编辑体验上做 ...
- sql示例_PARSEONLY SQL命令概述和示例
sql示例 This article explores the uses of the SET PARSEONLY SQL command for SQL Server queries. 本文探讨了S ...
- MaxCompute SQL大数据公开数据集实战
MaxCompute公开数据集简介 目前阿里云MaxCompute已经免费向全部用户开放了多种公用数据集,包括: 股票价格数据 房产信息 影视及其票房数据 TPC-DS数据集 这些公开数据现已免费开放 ...
- MaxCompute SQL的SELECT语法
MaxCompute SQL支持使用正则表达式select_expr选列. 使用正则表达式select_expr: SELECT `abc.*` FROM t;选出t表中所有列名以abc开头的列. S ...
- java聊天程序步骤解析_java网络之基于UDP的聊天程序示例解析
基于UDP的Socket通信 UDP协议不是一种基于稳定连接的协议,是一种面向数据报包的通信协议,不需要通信双方建立稳定的连接,也没有所谓服务端和客户的概念,数据报包在传输的时候不保证一定及时到达,也 ...
- 《Oracle SQL疑难解析》——1.6 批量地从一个表中复制数据到另一个表
本节书摘来自异步社区出版社<Oracle SQL疑难解析>一书中的第1章,第1.6节,作者: [美]Grant Allen , Bob Bryla , Darl Kuhn,更多章节内容可以 ...
- oracle 测试sql执行时间_通过错误的SQL来测试推理SQL的解析过程
这是学习笔记的第 1977 篇文章 如果抛出一个问题,你是如何理解MySQL解析器的,它和Oracle解析器有什么差别?相信大多数同学都会比较迷茫,因为这个问题很难验证,要不是看源码,要不就是查看书上 ...
最新文章
- spark 数据存储
- .NET项目迁移到.NET Core操作指南
- pythonweb服务器怎么让别人访问_Django配置让其他电脑访问网站
- Java中的模板方法模式
- ios无痕埋点_掌握数据生命周期:初识数据埋点
- Android SDK Tools 历史版本下载
- mac的win10蓝牙鼠标问题
- 操作系统下spinlock锁解析、模拟及损耗分析
- V2X(二)GNSSPC5UU
- ACS 中PEAP的认证
- mysql语句总结_mysql语句总结
- 湿空气性质计算,随笔与学习记录 (5.空气比焓)
- 全能型终端神器——MobaXterm安装教程
- Spring面试题(2022最新版)
- VL6810X驱动 距离和光线传感器 stm32 HAL库
- VMware Workstation 16.2.5 Pro Unlocker OEM BIOS for Linux
- 继承QWidget使用QPainter自定义二维图形控件【Qt学习】
- 如何训练你的准确率?
- 论文实验图片局部放大工具(可批量操作)
- 凯利公式指导投资示例
热门文章
- 三、CRUD(增删改查)
- html source type mp4,html5 – 获取MediaSource.isTypeSupported的mime类型
- return int()函数 c++解说
- 创维E900V21E/E900V22E_S905L3B/S905L2B通刷_支持5621DS无线_完美语音线刷固件
- Django-rest-framework框架之APIView与序列化详解
- python识别颜色并提取轮廓_pythonopencv检测并提取目标颜色
- 作业二:词云制作 使用软件wordart
- Qlikview Data Modeling---创建一个Key/Link Table
- 重新启动遇到错误导致系统安装无法继续
- redis面试题(一)赋答案