题解 | #返回购买价格为 10 美元或以上产品的顾客列表#

返回购买价格为 10 美元或以上产品的顾客列表

http://www.nowcoder.com/practice/827eb2a210c64ccdb8ec28fe4c50c246

解法一:创建子表 一开始我是打算用JOIN直接连接表OrderItems和表Orders,后面发现先从表OrderItems中筛选出价格在10美元以上的商品再与表Orders进行连接运行效率会更快(当然这与题目要求的子查询不太相关)。

SELECT DISTINCT cust_id
FROM (
    SELECT order_num
    FROM OrderItems
    WHERE item_price >= 10
) o JOIN Orders USING(order_num)

注意:同一顾客可能会多次购买十美元及以上的商品,故需要用DISTINCT去重。

解法二:使用子查询

SELECT DISTINCT cust_id
FROM Orders
WHERE order_num IN (
    SELECT order_num
    FROM OrderItems
    WHERE item_price >= 10
)
全部评论
请问 解法二中使用子查询的子表为什么不用临时表命名呢
2 回复 分享
发布于 2022-04-14 15:13
子查询根本查不出,不关联的话明显不是同一个表,这个题目提示的解题思路有问题
1 回复 分享
发布于 2023-04-22 16:41 广西
补充解释解法1的后半段:【o JOIN Orders USING(order_num)】这个 JOIN 子句是将上面的子查询的结果与订单表 Orders 进行内连接(inner join)。在这个内连接中,我们使用 USING(order_num) 来指定连接条件,即两个表中 order_num 字段相同的记录会被连接在一起。
1 回复 分享
发布于 2023-03-15 17:08 韩国
请问什么是o join呢?
1 回复 分享
发布于 2023-01-10 10:43 广东
我想问下如果同一个顾客购买的2个商品总价超过了10元 这样的写法是不是就不行了?
1 回复 分享
发布于 2022-10-13 14:36 浙江
请问一下 为什么解法2中的IN不能改为=呢
1 回复 分享
发布于 2022-08-04 15:52
因为没有从这张表中select 也就是不是from的对象。方法2的子表实际上只是一个列表。
1 回复 分享
发布于 2022-05-12 16:13
DISTINCT和GROUP BY是互通的 SELECT cust_id FROM Orders WHERE order_num IN ( SELECT order_num FROM OrderItems WHERE item_price >= 10 ) GROUP BY cust_id
点赞 回复 分享
发布于 2023-11-21 20:01 广东
select Orders.cust_id from Orders join OrderItems on Orders.order_num= OrderItems.order_num group by Orders.cust_id having sum(item_price)>=10;
点赞 回复 分享
发布于 2023-08-06 14:13 湖北
where 之后 order_num in 子查询,可以改成用= 吗? 我在mysql里运行是可以出结果的,自测运行也可以出结果,但是提交就显示SQL_ERROR_INFO: 'Subquery returns more than 1 row'
点赞 回复 分享
发布于 2022-12-09 04:47 重庆
为什么不能用左连接查询呢
点赞 回复 分享
发布于 2022-08-11 16:46
连接运行一直都比子查询快。
点赞 回复 分享
发布于 2022-06-29 11:33

相关推荐

点赞 评论 收藏
分享
评论
100
12
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务