馬哈魚間接數據流中的where-group-by子句
- 2022 年 2 月 8 日
- 筆記
- SQLFlow 血緣關係 job 數據流 數據分析, 馬哈魚
本文介紹間接數據流中的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、參考
馬哈魚數據血緣分析器:
馬哈魚數據血緣分析器中文網站: