如果AS在SQL中作为别名工作,那么它不应该在函数中工作吗?

时间:2017-02-25 19:37:54

标签: sql

从我收集的内容

SELECT 
  people.id, 
  people.name,
  COUNT(sales.sale) AS sale_count,
  RANK() OVER (ORDER BY sale_rank DESC) AS sale_rank
FROM people 
JOIN sales ON people.id = sales.people_id
GROUP BY people.id 
ORDER BY sale_count DESC;

应该表示COUNT(sales.sale)sale_count相同,但该示例仅在我使用时有效 RANK() OVER (ORDER BY COUNT(sales.sale) DESC) AS sale_rank

这是AS总是如何工作或者这可能是因为我正在做" SQL基础知识:简单的JOIN和RANK" Codewars上的kata?

1 个答案:

答案 0 :(得分:0)

这就是SQL的工作原理。通常,SELECT中定义的列别名不能在SELECT(或WHEREFROM子句中)中使用。

原因很简单:SQL不保证SELECT中表达式的排序。因此,定义和使用可以是任何顺序。

注意:有些数据库允许窗口函数的列别名。显然,你没有使用其中之一。