Sql 在此子查询中选择TOP
我正在学习从SQL书籍中选择TOP,作者编写了以下查询,以返回前10个状态的按状态排序的数量:Sql 在此子查询中选择TOP,sql,Sql,我正在学习从SQL书籍中选择TOP,作者编写了以下查询,以返回前10个状态的按状态排序的数量: SELECT state, numorders FROM (SELECT TOP 20 o.state, COUNT(*) as numorders FROM orders o GROUP BY o.state ORDER BY COUNT(*) DESC ) summary ORDER BY numorders desc 我不理解他的查询,我写了这个,这个查
SELECT state, numorders
FROM (SELECT TOP 20 o.state, COUNT(*) as numorders
FROM orders o
GROUP BY o.state
ORDER BY COUNT(*) DESC
) summary
ORDER BY numorders desc
我不理解他的查询,我写了这个,这个查询返回相同的结果:
SELECT TOP 20 o.state, COUNT(*) as numorders
FROM orders o
GROUP BY o.state
ORDER BY COUNT(*) DESC
我不确定,但我认为作者写第一个问题的原因是他在书中没有解释的,有人能帮我解释一下为什么吗?我应该问哪一个问题?谢谢这些查询是等价的,而一个优化者很可能会在幕后执行同样的操作 我倾向于认为作者正在演示关系代数的可组合性方面。他的版本是接受一个查询,然后用外部的select…ORDERBY组合它。这是关系代数中的一个强大功能,在关系代数中,复杂的集合可以由简单的集合组成。sql Optimizer在任何适当的实现(如sql server、oracle等)中都会将查询减少到最佳路径,因此您可以自由地以可理解、可组合的方式编写查询,而不必支付额外操作的代价。这实际上是关系代数的一个非常强大的属性