-
Notifications
You must be signed in to change notification settings - Fork 45.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
sql面试题中的一个错误答案 #2402
Comments
厉害的,你的SQL能力很强啊,这块是我疏忽了。 |
哈哈没有,只是看到了🤝🤝🤝 |
文章路径:数据库/基础/SQL/SQL常见面试题总结(1)/使用子查询/返回每个顾客不同订单的总金额
部分原文如下:
返回每个顾客不同订单的总金额
我们需要一个顾客 ID 列表,其中包含他们已订购的总金额。
OrderItems
表代表订单信息,OrderItems
表有订单号order_num
、商品售出价格item_price
、商品数量quantity
。Orders
表有订单号order_num
、顾客 idcust_id
。【问题】
编写 SQL 语句,返回顾客 ID(
Orders
表中的cust_id
),并使用子查询返回total_ordered
以便返回每个顾客的订单总数,将结果按金额从大到小排序。答案:
这道题应该是想求每个顾客下的所有订单的总金额,并按照总金额从大到小进行排序。
文章中的“写法2:连接表”的 sql 是没有问题的,先以 order_num 为连接条件进行连表查询,然后按照 cust_id 进行分组,就可以计算每个顾客的所有订单的总和。
但是“写法 1:子查询”,先子查询得到每个订单的总金额,然后就只有根据 order_num 连表查询了,但是 cust_id 与 order_num 是一对多的关系,即一个顾客会有多个订单,因此在连表查询后还是需要对 cust_id 分组。
因此,写法1中还需要加上对 cust_id 的分组才是对的,即:
同时建议修改一下文中的“并使用子查询返回
total_ordered
以便返回每个顾客的订单总数”,这个订单总数有点歧义,建议修改成“并使用子查询返回每个订单的总金额total_ordered
”测试:
文章中的写法1测试结果:
修改后的写法1测试结果:
文章中的写法2测试结果:
The text was updated successfully, but these errors were encountered: