sql – 如何重用SELECT,WHERE和ORDER BY子句的结果?
以下查询返回我们附近的场地(lat:62.0,lon:25.0),其中我们按照距离排列的半径: SELECT *,earth_distance(ll_to_earth(62.0,25.0),ll_to_earth(lat,lon)) AS distance FROM venues WHERE earth_distance(ll_to_earth(62.0,lon)) <= radius ORDER BY earth_distance(ll_to_earth(62.0,lon)) 是否可以(并且建议)重复使用earth_distance(ll_to_earth(62.0,lon))的结果,而不是单独为SELECT,WHERE和ORDER BY子句计算它? 解决方法在GROUP BY和ORDER BY子句中,您可以引用列别名(输出列)或甚至SELECT列表项的序号.我引用 the manual onORDER BY :
大胆强调我的. 但是在WHERE和HAVING子句中,您只能引用基表(输入列)中的列,因此您必须拼出函数调用. SELECT *,lon)) AS dist FROM venues WHERE earth_distance(ll_to_earth(62.0,lon)) <= radius ORDER BY distance; 如果您想知道将计算打包到CTE或子查询中是否更快,只需使用EXPLAIN ANALYZE进行测试即可. (我对此表示怀疑.) SELECT * FROM ( SELECT *,lon)) AS dist FROM venues ) x WHERE distance <= radius ORDER BY distance; 与@Mike commented一样,通过声明函数STABLE(或IMMUTABLE),您可以通知查询计划程序,对于单个语句中的相同调用,函数调用的结果可以重复使用多次.我引用the manual here:
大胆强调我的. (编辑:东莞站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- sql-server – 在我的本地计算机上通过SQL Server Manageme
- 微软暂缓反垄断处罚申请无效 Windows面临修改
- sql-server – 如何在脚本中设置SQL Server脚本的超时?
- 笔记本电脑声卡和音箱
- 补丁难以招架病毒 微软将推新安全策略
- sql-server – SQL Server位列真的使用整个字节的空间吗?
- entity-framework – SQL FileStream Entity Framework存储
- sql-server-2005 – 使用SQL varchar(max)还是文本?
- sql-server – 收缩数据库和文件有什么区别?
- 关于html的表单元素详解(二)