Функция Teradata MAX с дублирующимися строками - PullRequest
0 голосов
/ 13 сентября 2018

Какое значение будет возвращено, если мы будем использовать следующую функцию и почему?

MAX (CASE WHEN NAME = 'ABC' THEN GENDER END) AS SEX

Где у нас следующие две строки встол

GENDER        NAME
      M                ABC
      F                 ABC

1 Ответ

0 голосов
/ 13 сентября 2018

Вот тест, который вы можете запустить в своей собственной системе (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. Для этого столбца устанавливается любое значение в f1 или NULL в зависимости от вашего оператора CASE:

Промежуточный набор результатов:

col1
-----
M
F

Обе строки возвращают что-то, поскольку обе имеют Name, равный ABC. Теперь мы берем Max(), поскольку это следующий шаг в порядке операций этого SQL.

Максимальное значение двух значений M и F равно: M, поскольку M выше в алфавите (лексикографическая сортировка).

...