如果使用以下函数,为什么会返回哪个值?
MAX(性别为NAME的情况下为CASE)
我们在表中有以下两行
GENDER NAME
M ABC
F ABC
答案 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操作顺序的下一步。
两个值M
和F
的最大值为:M
,因为M
的字母较高(按字典顺序)。