MySql面试

面试者在Java开发岗位的面试中遇到MySQL问题,需查询上月销售额最高的三个店铺。原答案仅考虑单个订单金额,而实际需计算每个店铺所有订单的总和。复盘中提出了正确的SQL解决方案,包括JOIN和GROUPBY子句。
摘要由CSDN通过智能技术生成

下午面试了一家java开发岗,面试官提了一个mysql的面试题,现在来做一下复盘

1.题目:

        有订单表:订单id,店铺id,订单金额,订单生成时间,订单支付状态0-未支付,1-已支付;

            店铺表: 店铺名称,店铺logo,店铺描述

        现在需要查询上个月订单销售额最高的三个店铺信息,请描述你的实现思路

2.我的回答:

select 店铺id,店铺名称,店铺logo,店铺描述 from 店铺表 where 店铺id = (select 店铺id from 订单表 where 订单生成时间 between ... and ... ordered by 订单金额 limit 0, 3)

3.复盘:由于一个店铺可以有多笔订单,且需要查询的是销售额最高的三个店铺(请注意这里是销售额,而不是订单金额),销售额=该店铺下所有订单金额的总和,并且还会出现下面的问题

1个店铺对应多个订单,如果有下面情况:

        店铺a:订单1

        店铺a:订单2

        店铺a:订单3

        店铺b:订单4

那么会出现查询出来的前三个店铺都会是店铺a的情况,

修改后的sql:

 select 店铺id,店铺名称,店铺logo,店铺描述 from 店铺表 join (select 店铺id, sum(销售额) from 订单表 where 订单生成时间between ... and ... group by 店铺id order by 销售额 limit 0, 3)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值