2017-05-15 12 views
0

我試圖得到一個數的最大值的代碼如下HiveSQLException:無法識別輸入的近'選擇「MAX」「(」在表達規範

SELECT coachID, COUNT(coachID) 
FROM coaches_awards GROUP BY coachID 
HAVING COUNT(coachID) = 
(
    SELECT MAX(t2.awards) 
    FROM (
      SELECT coachID, count(coachID) as awards 
      FROM coaches_awards 
      GROUP BY coachID 
     ) t2 
); 

丈二和尚​​不斷失敗。內部查詢的工作原理和給出的答案是我想要的,如果內部查詢被替換爲所需的數字,外部查詢將起作用因此,我假設我已經犯了一些語法錯誤。錯?

回答

0

如果你只是在尋找一行,爲什麼不是d ○:

SELECT coachID, COUNT(coachID) as cnt 
FROM coaches_awards 
GROUP BY coachID 
ORDER BY cnt DESC 
LIMIT 1; 

如果你想聯繫,然後用RANK()DENSE_RANK()

SELECT ca.* 
FROM (SELECT coachID, COUNT(*) as cnt, 
      RANK() OVER (ORDER BY COUNT(*) DESC) as seqnum 
     FROM coaches_awards 
     GROUP BY coachID 
    ) ca 
WHERE seqnum = 1; 
+0

我想到剛使用限制,但..我覺得我走的是討巧。 – PatrickJayne

+0

「order by」子句將強制Hive通過一個reducer傳遞所有數據,因此如果教練數量非常多,這可能會耗費大量時間。 – akirillov

相關問題