为什么我不能限制我的等级()?
Why can't i limit my rank()?
我正在尝试对排名功能进行限制,但我似乎无法使其发挥作用。我错过了什么?到目前为止,我在外部查询上使用了 WHERE/HAVING 函数:WHERE rank < 10 但我得到的错误是没有排名列。
我环顾四周发现很多人也使用别名。
SELECT a.customer_name ,
a.unit ,
sum(a.price) - sum(b.price) AS "highest revenue" ,
rank() over (partition BY a.unit
ORDER BY sum(a.price) - sum(b.price) DESC) AS "Rank"
FROM
(SELECT customer_name ,
unit ,
price
FROM table1
WHERE booked BETWEEN '12/01/15' AND '12/31/15') a
JOIN
(SELECT customer_name ,
unit ,
price
FROM table1
WHERE booked BETWEEN '11/01/15' AND '11/30/15') b ON a.unit = b.unit
GROUP BY a.customer_name,
a.unit
ORDER BY a.unit,
sum(a.price) - sum(b.price) DESC, rank() over (partition BY a.unit ORDER BY sum(a.price) - sum(b.price) DESC) DESC
您不能在查询本身中使用别名,您应该将其全部包装在外部查询中:
SELECT customer_name, unit, "highest revenue", rank
FROM (
SELECT a.customer_name, a.unit,
sum(a.price - b.price) AS "highest revenue",
rank() OVER (PARTITION BY a.unit
ORDER BY sum(a.price - b.price) DESC) AS rank
FROM
(SELECT customer_name, unit, price
FROM table1
WHERE booked BETWEEN '12/01/15' AND '12/31/15') a
JOIN
(SELECT customer_name, unit, price
FROM table1
WHERE booked BETWEEN '11/01/15' AND '11/30/15') b USING (unit)
GROUP BY a.customer_name, a.unit) sub
ORDER BY unit, "highest revenue" DESC, rank DESC;
我正在尝试对排名功能进行限制,但我似乎无法使其发挥作用。我错过了什么?到目前为止,我在外部查询上使用了 WHERE/HAVING 函数:WHERE rank < 10 但我得到的错误是没有排名列。
我环顾四周发现很多人也使用别名。
SELECT a.customer_name ,
a.unit ,
sum(a.price) - sum(b.price) AS "highest revenue" ,
rank() over (partition BY a.unit
ORDER BY sum(a.price) - sum(b.price) DESC) AS "Rank"
FROM
(SELECT customer_name ,
unit ,
price
FROM table1
WHERE booked BETWEEN '12/01/15' AND '12/31/15') a
JOIN
(SELECT customer_name ,
unit ,
price
FROM table1
WHERE booked BETWEEN '11/01/15' AND '11/30/15') b ON a.unit = b.unit
GROUP BY a.customer_name,
a.unit
ORDER BY a.unit,
sum(a.price) - sum(b.price) DESC, rank() over (partition BY a.unit ORDER BY sum(a.price) - sum(b.price) DESC) DESC
您不能在查询本身中使用别名,您应该将其全部包装在外部查询中:
SELECT customer_name, unit, "highest revenue", rank
FROM (
SELECT a.customer_name, a.unit,
sum(a.price - b.price) AS "highest revenue",
rank() OVER (PARTITION BY a.unit
ORDER BY sum(a.price - b.price) DESC) AS rank
FROM
(SELECT customer_name, unit, price
FROM table1
WHERE booked BETWEEN '12/01/15' AND '12/31/15') a
JOIN
(SELECT customer_name, unit, price
FROM table1
WHERE booked BETWEEN '11/01/15' AND '11/30/15') b USING (unit)
GROUP BY a.customer_name, a.unit) sub
ORDER BY unit, "highest revenue" DESC, rank DESC;