最近很多小伙伴都在问sql–如何重用SELECT,WHERE和ORDERBY子句的结果?和sql重写这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展c#–OrderBy子句之前的w
最近很多小伙伴都在问sql – 如何重用SELECT,WHERE和ORDER BY子句的结果?和sql重写这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展c# – OrderBy子句之前的where子句 – 性能?、c# – 如何在LinqPad中将Where,Select,OrderBy等应用于存储过程的结果?、Count和Order By Where子句匹配、Groovy SQL忽略动态select语句中的order by子句等相关知识,下面开始了哦!
本文目录一览:- sql – 如何重用SELECT,WHERE和ORDER BY子句的结果?(sql重写)
- c# – OrderBy子句之前的where子句 – 性能?
- c# – 如何在LinqPad中将Where,Select,OrderBy等应用于存储过程的结果?
- Count和Order By Where子句匹配
- Groovy SQL忽略动态select语句中的order by子句
sql – 如何重用SELECT,WHERE和ORDER BY子句的结果?(sql重写)
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子句计算它?
解决方法
ORDER BY
:
Each expression can be the name or ordinal number of an output column
(SELECT list item),or it can be an arbitrary expression formed from
input-column values.
大胆强调我的.
但是在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:
A STABLE function cannot modify the database and is guaranteed to
return the same results given the same arguments for all rows within a
single statement. This category allows the optimizer to optimize
multiple calls of the function to a single call.
大胆强调我的.
c# – OrderBy子句之前的where子句 – 性能?
List<string> names = new List<string> { //... }; var ns = names.OrderBy(n => n).Where(n => n.Length == 5);
或者编译器会重新排列指令,以便Where子句在OrderBy子句之前执行吗?
解决方法
var query = myCollection.OrderBy(item => item.CreatedDate) .Where(item => item.Code > 3); var result = query.Last();
这需要对整个集合进行排序并过滤.如果我们有一百万个项目,只有其中一个代码大于3,我们会浪费大量的时间来排序结果,这将被丢弃.
与反向操作进行比较,首先过滤:
var query = myCollection.Where(item => item.Code > 3) .OrderBy(item => item.CreatedDate); var result = query.Last();
这一次,我们只是排序过滤的结果,在“只有一个匹配过滤器的项目”的示例中,在时间和空间上都将更加高效.
它还可以改变查询是否正确执行.考虑:
var query = myCollection.Where(item => item.Code != 0) .OrderBy(item => 10 / item.Code); var result = query.Last();
没关系 – 我们知道我们永远不会被0除.但是如果我们在过滤之前执行排序,那么查询将会抛出异常.
c# – 如何在LinqPad中将Where,Select,OrderBy等应用于存储过程的结果?
‘LINQPad.ReturnDataSet’ does not contain a deFinition for ‘Where’ and
no extension method ‘Where’ accepting a first argument of type
‘LINQPad.ReturnDataSet’ Could be found
有解决方法吗?
解决方法
Count和Order By Where子句匹配
我正在为FAQ列表编写一些非常简单的搜索功能。我正在将搜索字符串拆分为各种字符,包括空格。然后根据以下内容执行选择
SELECT *
FROM "faq"
WHERE
((LOWER("Question") LIKE '%what%'
OR LOWER("Question") LIKE '%is%'
OR LOWER("Question") LIKE '%a%'
OR LOWER("Question") LIKE '%duck%'))
我不得不对其进行稍微的编辑,使其由我们的数据访问层生成,但是它应该使您对发生的事情有所了解。
上面的查询很好地说明了这个问题,因为大多数问题中可能都包含单词a或is,但是我无法将其过滤掉,因为首字母缩略词对搜索者而言很重要。建议的是,我们根据匹配关键字的数量进行排序。但是,我一直找不到在SQL中执行此操作的方法(我们没有时间用关键字等的索引来创建简单的搜索引擎)。有谁知道是否有一种方法可以计算SQL语句中LIKE匹配的数量并以此排序,以使关键字最多的问题出现在结果的顶部?
Groovy SQL忽略动态select语句中的order by子句
我的查询:
sql.eachRow("select * from mytable where type = ''SUMMARY'' and acolumn=${columnValue} order by ${sortColumn} ${sortOrder}") { row -> results << row.toRowResult() }
我可以通过对返回的列表进行排序来解决问题,但是如果可能的话,我想在sql语句中执行此操作.这是一个已知的问题吗?
解决方法
这不适用于ORDER BY子句,因此您需要use Sql.expand
尝试:
sql.eachRow( "select * from mytable where type = ''SUMMARY'' and acolumn=${columnValue} order by ${sql.expand(sortColumn)} ${sql.expand(sortOrder)}") { row -> results << row.toRowResult() }
关于sql – 如何重用SELECT,WHERE和ORDER BY子句的结果?和sql重写的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于c# – OrderBy子句之前的where子句 – 性能?、c# – 如何在LinqPad中将Where,Select,OrderBy等应用于存储过程的结果?、Count和Order By Where子句匹配、Groovy SQL忽略动态select语句中的order by子句的相关知识,请在本站寻找。
本文标签: