为什么我不能在计数(*)“列"中使用别名?并在具有条款中引用它?
我想知道为什么我不能在 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 之前进行评估 - 因此服务器还不知道该别名.
<块引用>- 首先形成 from 子句中所有表的乘积.
- 然后对 where 子句求值以消除不满足的行search_condition.
- 接下来,使用 group by 子句中的列对行进行分组.
- 那么,不满足中的search_condition的组有子句被删除.
- 接下来,select 子句目标列表中的表达式是评估.
- 如果distinct关键字出现在select子句中,重复行现已淘汰.
- 在评估每个子选择后采用 联合.
- 最后,根据列对结果行进行排序在 order by 子句中指定.
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.
相关文章