2015-07-21 40 views
4

我想獲取Hive中表的第一個四分位數的摘要數據。下面是一個查詢得到的意見,每個四分位數的最大數量:使用Hive ntile結果在where子句中

SELECT NTILE(4) OVER (ORDER BY total_views) AS quartile, MAX(total_views) 
FROM view_data 
GROUP BY quartile 
ORDER BY quartile; 

而這個查詢就是獲得了在第一個四分所有的人的名字:

SELECT name, NTILE(4) OVER (ORDER BY total_views) AS quartile 
FROM view_data 
WHERE quartile = 1 

我得到這個錯誤的兩個查詢:

Invalid table alias or column reference 'quartile' 

如何可以引用ntile結果where條款或group by子句中?

回答

3

您不能在window子句中放置窗口函數,因爲如果存在複合謂詞,將會產生歧義。所以使用子查詢。

select quartile, max(total_views) from 
(SELECT total_views, NTILE(4) OVER (ORDER BY total_views) AS quartile, 
FROM view_data) t 
GROUP BY quartile 
ORDER BY quartile 
; 

select * from 
(SELECT name, NTILE(4) OVER (ORDER BY total_views) AS quartile 
FROM view_data) t 
WHERE quartile = 1 
; 
+0

我真的不明白你所造成的複合謂語模棱兩可的意思,你能舉個例子嗎? – Nadine

+1

SELECT col1 FROM T1 WHERE ROW_NUMBER()OVER(ORDER BY col1)<= 3 AND col1>'100' 這裏的操作順序是什麼?謂詞的col1>'100'部分應該先運行還是應該按行編號。 – invoketheshell