【问题标题】:Teradata MAX function with duplicate rows具有重复行的 Teradata MAX 函数
【发布时间】:2018-09-14 03:53:47
【问题描述】:

如果我们使用下面的函数会返回哪个值,为什么?

最大(当名字='ABC'然后性别结束时)作为性别

我们在表格中有以下两行

GENDER        NAME
      M                ABC
      F                 ABC

【问题讨论】:

  • 不是返回一行,而是返回一个值。
  • 是的..告诉我哪个值
  • @SantoshSupplepatil 在您的系统中自行运行。这将是一个简单的测试。答案是M,因为M 大于F 和我们的ABC
  • 那么,你的意思是它会给字母 A-Z 作为 1-26 的 seq no 吗??

标签: teradata


【解决方案1】:

这是您可以在自己的系统(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 在字母表中更高(按字典顺序排列)。

【讨论】:

  • 我很高兴听到这个消息!词典排序有时会让人头疼。尤其是当您使用 M0123M9MA1... 之类的字母数字时,那么 Max() 会是哪一个? ;)
  • 我觉得应该是MA1
  • 你知道的比你说的要多!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-27
  • 2018-02-27
相关资源
最近更新 更多