马哈鱼间接数据流中的where-group-by子句

马哈鱼间接数据流中的where-group-by子句

本文介绍间接数据流中的where-group-by子句。

 

1、列在where子句中

WHERE子句中源表中的某些列不影响目标列,但对所选行集至关重要,因此应保存这些列以进行影响分析,并向目标表间接提供数据流。

以下述SQL为例:

SELECT a.empName "eName" FROM scott.emp a Where sal > 1000

select列表的总行数受where子句中sal列的值影响,我们为这种关系建立了一个间接数据流:

scott.emp.sal -> indirect -> RS-1.RelationRows

数据流图示:

 

2. COUNT()

COUNT()函数是一个聚合函数,用于计算关系的总行数。

2.1 where子句中不包含 group by

示例SQL:

SELECT COUNT() num_emp FROM scott.emp where city=1

在上面的SQL中,将创建两个间接数据流,因为COUNT()的值受where子句中的city列和scott.emp表的总行数的影响。

scott.emp.city -> indirect -> COUNT()
scott.emp.RelationRow -> indirect -> COUNT()

数据流图示:

2.2 where 子句中包含 group by

SELECT deptno, count() total_num
FROM scott.emp
where city=1
group by deptno;

如您所见,除了在前面的SQL中创建的两个间接数据流之外,还使用GROUPBY子句中的deptno创建了第三个间接数据流。

scott.emp.city -> indirect -> COUNT()
scott.emp.Relations -> indirect -> COUNT()
scott.emp.deptno -> indirect -> COUNT()

3. 其他聚合函数

创建间接数据流时,其他聚合函数,如SUM()的工作原理与COUNT()函数略有不同。

3.1 where子句中包含 group by

SELECT deptno, SUM(SAL) sal_sum
FROM scott.emp
where city=1
group by deptno

聚合函数(如SUM()根据group by子句中使用的列确定的记录集计算值,因此group by子句中的deptno列用于创建一个间接数据流到SUM()函数。

从deptno到SUM()创建了一个间接数据流。

scott.emp.deptno -> indirect -> SUM()

如果出现group by子句,RelationRows伪列将不用于创建间接数据流。

3.2 where 子句中不包含 group by

SELECT SUM(SAL) sal_sum
FROM scott.emp
where city=1

上面的SQL表示表的整个记录集将用于计算SUM()函数的值。

因此,将创建两个间接数据流,如下所示:

scott.emp.city -> indirect -> SUM()
scott.emp.RelationRows -> indirect -> SUM()

4、参考

马哈鱼数据血缘分析器: https://sqlflow.gudusoft.com

马哈鱼数据血缘分析器中文网站: https://www.sqlflow.cn

推荐这些文章:

马哈鱼聚合函数中使用的数据流列

聚合函数通常将列作为参数,在本文中,我们将讨论在用作函数参数的列和聚合函数之间创建什么样的数据流。
1. COUNT()
COUNT()可以采用COUNT(),也可以采用任何列名,甚至可以采用空参数。如果参数为空或为列,则参数和函数之间不会生成数据流。
1.1 直接数据流
SELECT count(empId) total_num FROM scott.emp;
默认情况下,empId列和COUNT()函数之间将生成直接数据流。
scott.emp.empId -> direct -> COUNT()
这个数据流可能看起来很奇怪,因为COUNT()的结果值不依赖于empId列的值...

oracle-scott-练习题(2)

--用SQL完成以下问题列表:--1.列出至少有一个员工的所有部门。
select * from dept d where exists(select * from emp where deptno =d.deptno);
select distinct d.* from dept d,emp e where d.deptno=e.deptno;
--2.列出薪金比“SMITH”多的所有员工。select * from emp where sal >(select sal from emp where ename='SMITH');
--3.列出所有员工的姓名及其直接上级的姓名。...

oracle-scott-建表建数据

REM Script: EMP and DEPT-- oracle 部门表和员工表
-- Create DEPT table which will be the parent table of the EMP table. create table dept( deptno number(2,0), dname varchar2(14), loc varchar2(13), constraint pk_dept primary key (deptno) );
-- Create the EMP table which has...

oracle-scott-练习题(1)

–1、选择部门30中的雇员select from emp where deptno = 30;–2、列出所有办事员的姓名、编号和部门select ename,empno,dname from emp e inner join dept d on e.deptno = d.deptnowhere job=upper(‘clerk’);–3、找出佣金高于薪金的雇员select ename,sal,comm from emp where sal < comm;–4、找出佣金高于薪金60%的雇员select ename,sal,comm from emp where sal0.6 < c...

oracle-scott-练习题(3)

1.查询所有的部门编号: select DEPTNO from DEPT ;
2.查询所有有人的部门编号: select DEPTNO from EMP ;
3.查询所有岗位名称: select DISTINCT “JOB” from EMP ;
4.查询所有薪水超过两千的员工信息 select * from EMP where SAL>2000;
5.查询所有20部门的员工姓名,编号及薪水 select ENAME,EMPNO,SAL from EMP where DEPTNO=20;
6.查询所有没有奖金的员工信...

马哈鱼血缘分析工具介绍

SQLFlow通过分析SQL查询和存储过程来生成数据血缘关系。数据血缘关系模型中的实体包括表、列、函数、关系和其他实体。实体和数据流的组合显示了从一个表/列到另一个表/列的沿袭。

1、数据流单元
数据流单元包括源实体、目标实体以及它们之间的数据流类型。
SELECT p.FirstName from Person.Person AS p
这是为上述SQL查询生成的数据流。
person.persion.FirstName -> direct -> RS-1.FirstName

1.1 源、目标实体
源实体和目标实体通常引用表、视图和其他关系,例如公共表表达式、查询执行期间生...

马哈鱼间接数据流和伪列介绍

马哈鱼间接数据流和伪列介绍
本文介绍一些生成间接数据流的SQL元素。间接数据流通常由where子句、group by子句、聚合函数等中使用的列生成。
为了在列之间创建间接数据流,我们引入了一个伪列:RelationRows。
RelationRows是关系的伪列,用于表示关系中的行数。顾名思义,RelationRows不是关系(表/结果集等)中的真正列。通常,它用于表示列和关系之间的数据流。RelationRows伪列可用于源关系和目标关系。
1、RelationsRows在目标关系中
以下述SQL为例:
SELECT a.empName "eName" FROM scott.emp a W...

文章标题:马哈鱼间接数据流中的where-group-by子句
文章链接:https://www.dianjilingqu.com/50886.html
本文章来源于网络,版权归原作者所有,如果本站文章侵犯了您的权益,请联系我们删除,联系邮箱:saisai#email.cn,感谢支持理解。
THE END
< <上一篇
下一篇>>