1
質問の基本的な前提は、私が毎月いくつかのサンプルを取得する必要がある大きなハーフテーブルをハーフープに持っていることです。私は私が取得したいことは、各チーズカテゴリで最も若い2人のようなものであるImpalaの解析関数where節の解析関数
--Create the table
CREATE TABLE exp_dqss_team.testranking (
Name STRING,
Age INT,
Favourite_Cheese STRING
) STORED AS PARQUET;
--Put some data in
INSERT INTO TABLE exp_dqss_team.testranking
VALUES (
('Tim', 33, 'Cheddar'),
('Martin', 49, 'Gorgonzola'),
('Will', 39, 'Brie'),
('Bob', 63, 'Cheddar'),
('Bill', 35, 'Brie'),
('Ben', 42, 'Gorgonzola'),
('Duncan', 55, 'Brie'),
('Dudley', 28, 'Cheddar'),
('Edmund', 27, 'Brie'),
('Baldrick', 29, 'Gorgonzola'));
...私は後だが、明らかにそれが実際のデータではありません事の並べ替えを表示するには、以下を嘲笑しました。下記の私に、各チーズカテゴリの年齢のランキングを与えるが、上の2つに制限しません。
SELECT RANK() OVER(PARTITION BY favourite_cheese ORDER BY age asc) AS rank_my_cheese, favourite_cheese, name, age
FROM exp_dqss_team.testranking;
私はそれは私に次のエラーを与えるWHERE
句を追加した場合:
WHERE clause must not contain analytic expressions
SELECT RANK() OVER(PARTITION BY favourite_cheese ORDER BY age asc) AS rank_my_cheese, favourite_cheese, name, age
FROM exp_dqss_team.testranking
WHERE RANK() OVER(PARTITION BY favourite_cheese ORDER BY age asc) <3;
を
これを行うには、すべてのランキングのテーブルを作成してから、それをランク付けのWHERE
節で選択するよりも良い方法はありますか?
ありがとうございます。私はおそらくそれを考えすぎたと思う! –