0

以下のスクリプトで、重量でトップの人を獲得しようとしています。私は250の重みでMatt Holidayを返す作業バージョンの方法を下に持っています。今私が欲しいのはそれだけです最大の重みを持つプレーヤーと彼は他の誰でもない

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
4

1 に答える 1

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;

式 1、式 2、... 式_n 集計関数内にカプセル化されず、SQL ステートメントの末尾の GROUP BY 句に含める必要がある式 http://www.techonthenet.com/sql/group_by.php

これはおそらく、HiveQL にも同じルールが存在するためです。

于 2016-04-18T18:04:16.587 に答える