Hive中计算TopN的函数

zjk 发布于 2024-07-01 66 次阅读


假设我们有一个名为 sales 的表,其中包含列 salesperson 和 amount,我们想要为每位销售员按照销售额进行排名。

ROW_NUMBER(): 这个例子为每位销售员分配一个唯一的序号,不考虑是否有相同的销售额。

SELECT
  salesperson,
  amount,
  ROW_NUMBER() OVER (ORDER BY amount DESC) AS row_num
FROM
  sales;

RANK(): 这个例子为销售员按照销售额排名,如果有相同的销售额,则它们会得到相同的排名。

SELECT
  salesperson,
  amount,
  RANK() OVER (ORDER BY amount DESC) AS rank
FROM
  sales;

DENSE_RANK(): 这个例子也是为销售员按照销售额排名,但是它会连续分配排名,不会跳过后续的排名。

SELECT
  salesperson,
  amount,
  DENSE_RANK() OVER (ORDER BY amount DESC) AS dense_rank
FROM
  sales;

NTILE(): 这个例子将销售员分成四个桶(即四等分),假设有400名销售员,需要按销售额取Top100。

SELECT
  salesperson,
  amount,
  quartile
FROM (
  SELECT
    salesperson,
    amount,
    NTILE(4) OVER (ORDER BY amount DESC) AS quartile
  FROM
    sales
) subquery
WHERE
  quartile = 1;