Вот тест, который вы можете запустить в своей собственной системе (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
выше в алфавите (лексикографическая сортировка).