假设我们有一个名为 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;
Comments NOTHING