2017-02-25 50 views
1

從我收集了這些如果AS在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

請問這是怎麼一如既往工程或會是這樣,因爲示例只能我正在做Codewars上的「SQL基礎:簡單JOIN和RANK」kata?

回答

0

這就是SQL的工作原理。通常,在SELECT中定義的列別名不能在該SELECT(或WHEREFROM條款)中稍後使用。

原因很簡單:SQL不保證SELECT中表達式的排序。因此,定義和使用可以按任何順序。

注意:有一些數據庫允許窗口函數的列別名。顯然,你沒有使用其中的一種。

相關問題