我想知道为什么我不能在 count(*) 中使用别名并在 having 子句中引用它.例如:
选择Store_id作为StoreId,count(*)作为_count从商店产品按 Store_id 分组_count >0
行不通..但如果我删除 _count 并使用 count(*) 代替它会起作用.
参见 CodeByMoonlight 在 文档2068439/why-cant-i-apply-a-criteria-on-a-sub-query/2068492#2068492">回答 你最近的问题.
HAVING 子句在 SELECT 之前进行评估 - 因此服务器还不知道该别名.
<块引用>I was wondering why can't I use alias in a count(*) and reference it in the having clause. For instance:
select Store_id as StoreId, count(*) as _count
from StoreProduct
group by Store_id
having _count > 0
Wouldn't work.. But it works if I remove _count and use count(*) instead.
See the document referenced by CodeByMoonlight in an answer to your recent question.
The HAVING clause is evaluated before the SELECT - so the server doesn't yet know about that alias.
- First the product of all tables in the from clause is formed.
- The where clause is then evaluated to eliminate rows that do not satisfy the search_condition.
- Next, the rows are grouped using the columns in the group by clause.
- Then, Groups that do not satisfy the search_condition in the having clause are eliminated.
- Next, the expressions in the select clause target list are evaluated.
- If the distinct keyword in present in the select clause, duplicate rows are now eliminated.
- The union is taken after each sub-select is evaluated.
- Finally, the resulting rows are sorted according to the columns specified in the order by clause.
这篇关于为什么我不能在计数(*)“列"中使用别名?并在具有条款中引用它?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!