sql - 稍作修改的 SQL 查询给出不同的结果
问题描述
我正在学习 SQL 并使用分析功能做一些练习。我有以下查询来找出最高ship_name
的order_value
订单。以下是我的表格:
orders(id, ship_name, city_of_origination)
order_details(id, order_id, unit_price, quantity)
为了解决这个问题,我写了以下查询:
select o.ship_name, od.quantity*od.unit_price, first_value(od.quantity*od.unit_price) over (order by od.quantity*od.unit_price desc)
from orders o
inner join order_details od
on o.order_id = od.order_id
limit 1
limit
在上面的查询中删除后的示例输出如下:
稍微改变一下问题陈述,我只想要ship_name。所以我写了这个查询:
select tmp.ship_name
from (select o.ship_name as ship_name, first_value(od.quantity*od.unit_price) over (order by od.quantity*od.unit_price desc) fv
from orders o
inner join order_details od
on o.order_id = od.order_id
limit 1
) tmp;
令我惊讶的是,结果发生了变化。这是上面没有 wuery 的结果limit
:
同时,如果我执行以下查询:
select tmp.ship_name, tmp.fv
from (select o.ship_name as ship_name, first_value(od.quantity*od.unit_price) over (order by od.quantity*od.unit_price desc) fv
from orders o
inner join order_details od
on o.order_id = od.order_id
limit 1
) tmp;
我得到与第一个查询相同的结果(和预期的结果)。我的问题是:为什么上述查询的结果有所不同?
解决方案
limit
不order by
返回任意行。在后续执行时,它甚至可能不会为同一查询返回同一行。
因此,用于order by
控制返回哪一行。
推荐阅读
- html - 在css中为两个不同的闪烁类创建两种不同的样式
- python-3.x - Keras - 我如何训练多类模型?
- java - JSON Parser:解析数据时出错 org.json.JSONException:无法转换类型 org.json.JSONArray
- sockets - 在 goroutine 中使用套接字的正确方法是什么
- python - Google Cloud IoT Gateway 连接内存不足
- php - Laravel 5填充方法未获取所有属性
- javascript - 为什么请求中没有设置 cookie?
- mongodb - 如何使用pyspark在mongodb中保存数据框?
- arrays - 数组返回未定义
- python-3.x - ValueError: '/anaconda3/lib/libpython3.6.dylib' 不存在