在SQL语句中,Where 与having 区别大家并不陌生,同是用于条件筛选,WHERE作用于表中实际存在的列,HAVING作用于虚拟列或者子查询的列。不赘述。
昨天遇到一个业务需求,需要同时用WHERE筛选现有表中的列,同时需要对一个函数返回值进行进行条件限制。莫名的报错,然后baidu,google了一下,关键词where,having,同用;然后一大堆全是讲它们分别作用于什么,至于它们能不能同用的问题一个也没有。
然后今天早上过来,莫名的又可以了。它们可以同用。
运行结果:
但是where 必须放在having之前,而不是相反,不然就会报错。
同样的,order by 也可以用于虚拟列或者子查询的列进行排序。
测试环境为mysql,ORACLE没有测过。可能因为这是个无关紧要的知识点,所以网上才没有这方面的资料。但由于昨天的报错,决定还是记录下来。
PS:完全可以通过子查询来完成。