zl程序教程

您现在的位置是:首页 >  IT要闻

当前栏目

一道sql面试题

2023-02-18 16:23:47 时间

最近有朋友去面试问了我一道sql面试题。看似简单,实则还是有坑在里面的。

题目是要求用一条sql语句检索出订单表中购买每类产品付款数都大于60元的客户姓名。

订单表有三个字段,分别是客户姓名,产品类型,付款数。

这道题的现实意义我猜可能是想求出优质用户,然后围绕优质用户做一些推广或者给出一些优惠促成他们继续成交。

那这道题到底怎么解呢?图片下方是我朋友给出的答案。

聪明的读者,先别着急往下看,你可以停下来自己想一下写一下。

这道题的解题思路是这样的。

首先你需要求出每个用户每个产品付款金额的总和,因为每个用户可能在一个产品上下单了多次。这里可以对用户、产品分组,对付款金额聚合求和

在第一步的基础上,求出每个用户在每类产品上的最低花费,这里可以对用户分组,对付款金额聚合求最小值

然后按照60元的阈值进行过滤就能得到目标客户名称啦

最后的答案是这样子的:

select Name from

( select Name,sum(Payment) Payment from product group by Name,Product ) a

group by Name

having min(Payment)>60