具有重复行的Teradata MAX功能

时间:2018-09-13 19:01:07

标签: teradata

如果使用以下函数,为什么会返回哪个值?

MAX(性别为NAME的情况下为CASE)

我们在表中有以下两行

GENDER        NAME
      M                ABC
      F                 ABC

1 个答案:

答案 0 :(得分:2)

以下是您可以在自己的系统(Teradata Studio,SQL Assistant,Atanasuite,bteq或使用的任何工具)中运行的测试:

CREATE VOLATILE TABLE test2
(
    f1 CHAR(1),
    f2 CHAR(3)
) PRIMARY INDEX (f1) ON COMMIT PRESERVE ROWS;
INSERT INTO test2 VALUES ('M', 'ABC');
INSERT INTO test2 VALUES ('F', 'ABC');

SELECT MAX(CASE WHEN f2='ABC' THEN f1 END) FROM test2;

DROP TABLE test2;

这将输出M

正在发生的事情是,在聚合之前,将为列f1的所有行生成一个中间结果集。根据您的CASE语句,将一列设置为f1或NULL中的值:

中间结果集:

col1
-----
M
F

这两行都返回某内容,因为它们的Name等于ABC。现在,我们采用Max(),因为这是此SQL操作顺序的下一步。

两个值MF的最大值为:M,因为M的字母较高(按字典顺序)。