不能再where后边使用别名,group by后边也一样不能使用别名

select id,col1 - col2 from table1

where (col1 - col2) > 1000;  —可以运行,但是不是很好看

尝试

select id,(col1 - col2) as n1 from table1

where n1 > 1000;   —会报错,因为where后边不能使用别名

如果筛选条件是个算式而且很长,总不能直接搬上吧

如何解决呢?

使用嵌套select

为什么where group by后边不能用别名呢?(mysql中group by后边可以用别名)

因为别名执行依附于select,而select的执行在where group by之后

所以不能用,在select执行操作后边的操作可以用,比如order by limit等.

下面是执行顺序

(7)    SELECT

(8)    DISTINCT <select_list>

(1)    FROM <left_table>

(3)    <join_type> JOIN <right_table>

(2)    ON <join_condition>

(4)    WHERE <where_condition>

(5)    GROUP BY <group_by_list>

(6)    HAVING <having_condition>

(9)    ORDER BY <order_by_condition>

(10)   LIMIT <limit_number>

我们发现select在第7位,where group by having 都是在select前面的,所以不能用别名.

注意:在使用where的时候后边加的过滤字段不能是非聚合字段,而having后边加的是聚合字段

   因为where执行的顺序是在group by之前,所以不能用聚合字段

   where 和 having 可以同时使用,一个作用非聚合字段,一个作用聚合字段.

select t.id, t.n1 from(

select id,(col1 -col2) as n1 from table1

) e

where e.n1 > 1000;

最新文章

  1. Kylin(三): Saiku
  2. Azure China (12) 域名备案问题
  3. 解决Button设置disabled后无法执行后台代码问题
  4. plupload上传插件在SpringMVC中的整合
  5. TClientDataSet中关于TField、TFieldDef动态创立字段的应用
  6. JS工具库之Lodash
  7. php fsockopen
  8. Linux Namespaces机制——实现
  9. 关于FPGA随笔
  10. Scrum Mastery:有效利用组织的5个步骤
  11. iOS----------Bad Gateway
  12. 快速失败/报错机制 - fail-fast
  13. Hadoop技术内幕1——源代码环境准备
  14. 微信小程序 - async/await
  15. [Unity Shader] 常用的数值类型和语义
  16. 多种方法实现div两列等高(收集整理)
  17. &lt;td&gt;标签scope属性
  18. cmake处理多源文件目录的方法
  19. [SP1825] Free tour II
  20. POJ - 2248 迭代加深

热门文章

  1. Java设计原则—接口隔离原则(转)
  2. 对 META标签 的一点点了解
  3. zookeeper 监听事件 NodeCacheListener
  4. python3_json模块使用与字符编码问题
  5. Linux查看系统与内核信息(uname、file和lsb_release -a)
  6. 理解RESTful 架构
  7. 关于URL和http协议,http消息格式
  8. Spring Aop之Cglib实现原理详解
  9. 20145103《JAVA程序设计》第十周学习总结
  10. 爬虫之动态HTML处理(Selenium与PhantomJS )网站模拟登录