Пытаясь найти максимум выбора оператора в HIVE

Я пытаюсь найти лучшего человека по весу в приведенном ниже сценарии. Ниже у меня есть рабочая версия, которая возвращает Мэтта Холидея с весом 250, и теперь это все, что я хочу. Игрок с максимальным весом и только он, а не кто-то другой

SELECT DISTINCT n.fname, n.lname, MAX(n.weight) FROM master n 
JOIN (SELECT b.id as id, b.year as year, b.triples as triples FROM batting b 
WHERE year == 2005 AND triples > 5) x
ON x.id = n.id
ORDER BY n.weight DESC;

Теперь это приводит к ошибке, как это

Failed: Semantic Exception [Error 10128]: Line 4:34 Not yet supported place for UDAF 'MAX'

Однако этот скрипт возвращает то, что я ожидал, вывод ниже

SELECT DISTINCT n.fname, n.lname, n.weight FROM master n 
JOIN (SELECT b.id as id, b.year as year, b.triples as triples FROM batting b 
WHERE year == 2005 AND triples > 5) x
ON x.id = n.id
ORDER BY n.weight DESC;

выход

Matt Holiday 250
Bill Dickey 205
Bob Feller 200
Tom Glavine 190

1 ответ

Решение

У вас есть функция агрегации и для получения желаемого результата вам нужно использовать group by

SELECT n.fname, n.lname, MAX(n.weight) FROM master n 
JOIN (SELECT b.id as id, b.year as year, b.triples as triples FROM batting b 
WHERE year == 2005 AND triples > 5) x
ON x.id = n.id
GROUP BY n.fname,n.lname
ORDER BY n.weight DESC
LIMIT 1;

Параметры или Аргументы

SELECT expression1, expression2, ... expression_n, 
       aggregate_function (aggregate_expression)
FROM tables
[WHERE conditions]
GROUP BY expression1, expression2, ... expression_n;

expression1, expression2, ... expression_n Выражения, которые не инкапсулированы в агрегатную функцию и должны быть включены в предложение GROUP BY в конце инструкции SQL http://www.techonthenet.com/sql/group_by.php

это, вероятно, потому что такое же правило существует и в HiveQL

Другие вопросы по тегам