SQL查找既购买过ProductA又购买过ProductB,但没有购买ProductC的用户人数,并计算平均客单价(in、聚合函数)
【面试题】某公司数据库里有3张表,销售订单表、产品明细表、销售网点表
”销售订单表”记录了销售情况,每一张数据表示哪位顾客、在哪一天、哪个网点购买了什么产品,购买的数量是多少,以及对应产品的零售价
销售订单表、产品明细表、销售网点表字段之间的关系如下
销售订单表和产品明细表通过“产品”字段关联,销售订单表和销售网点通过“交易网点”关联
【问题】查找既购买过ProductA又购买过ProductB,但没有购买ProductC的用户人数,并计算平均客单价
【解题思路】
需要把满足三个条件的用户查找出来:
1)买过ProductA
2)买过ProductB
3)没有购买ProductC
select 顾客ID,销售数量,零售价,订单号
from 销售订单表
where
顾客ID in (select 顾客ID from 销售订单表 where 产品 ='ProductA')
and
顾客ID in (select 顾客ID from 销售订单表 where 产品 ='ProductB')
and
顾客ID not in (select 顾客ID from 销售订单表 where 产品 ='ProductC');
我们把上一步的查询结果记录为临时表a。然后,再用聚合函数计算顾客人数,平均客单价
select count(distinct(a.顾客ID))as 顾客人数,sum(a.销售数量*a.零售价)/count(distinct(a.订单号)) as 客单价
from a;
我临时表a的SQL带入上面SQL里,就是最终的SQL:
select count(distinct(a.顾客ID))as 顾客人数,sum(a.销售数量*a.零售价)/count(distinct(a.订单号)) as 客单价
from
(select 顾客ID,销售数量,零售价,订单号
from 销售订单表
where
顾客ID in (select 顾客ID from 销售订单表 where 产品 ='ProductA')
and
顾客ID in (select 顾客ID from 销售订单表 where 产品 ='ProductB')
and
顾客ID not in (select 顾客ID from 销售订单表 where 产品 ='ProductC')
) as a;
【本题考点】
1.将多条件转化为SQL的能力
2.in的用法,SQL中in常用于where表达式中,其作用是查询某个范围内的数据
如果字段范围比较多,可以使用and或or运算符。如果要排除、否定某个范围前面加上not,为not in
3.聚合函数的使用
SQL查找既购买过ProductA又购买过ProductB,但没有购买ProductC的用户人数,并计算平均客单价(in、聚合函数)相关推荐
- SQL分析在2020年度第一季度的购买人数,销售金额,客单价,客单件人均购买频次(时间函数、分组汇总、常用指标计算)
[面试题]某公司数据库里有3张表,销售订单表.产品明细表.销售网点表 "销售订单表"记录了销售情况,每一张数据表示哪位顾客.在哪一天.哪个网点购买了什么产品,购买的数量是多少,以及 ...
- SQL语言_3 模糊查询和聚合函数
SQL语言_3 模糊查询和聚合函数 作者:田超凡 版权所有,转载请注明原作者,仿冒侵权必究法律责任 1.数据库中查询的机制 查询是针对数据表中已存在的数据行而言的,可以将它简单理解为筛选,将符合条件的 ...
- SQL中where子句中不能出现聚合函数的原因
首先我们应该熟悉什么聚合函数: 例如SUM(),MIN(),Max()这类的,我们称作是聚合函数. 那么我们不能在where子句中使用这些函数,为什么呢? 聚集函数也叫列函数,它们都是基于整列数据进行 ...
- SQLServer sql学习笔记(开窗函数,连接,四舍五入,分页,聚合函数等)
一.四舍五入 1. Round(@num,2) 保留两位有效数字,四舍五入但不去掉零 2.Convert(decimal(18,2),@num) 3.cast(@num as decimal(18 ...
- LeetCode MySQL 1398. 购买了产品A和产品B却没有购买产品C的顾客
文章目录 1. 题目 2. 解题 1. 题目 Customers 表: +---------------------+---------+ | Column Name | Type | +------ ...
- SQL 查找重复记录
SQL 查找重复记录 CREATE TABLE product ( ID INT IDENTITY(1,1) PRIMARY KEY NOT NULL, Pid INT NOT NULL, Pn ...
- 如何购买腾讯云服务器?腾讯云服务器购买教程
如何购买腾讯云服务器?腾讯云服务器购买教程 如何购买腾讯云服务器?腾讯云服务器如何购买?腾讯云服务器购买有三种方式,一种是直接在活动上买,一种是通过快速配置,最后一种是自定义购买,快速配置没什么意思, ...
- 怎么购买苹果教育优惠产品?苹果在线商店购买教育优惠产品的具体流程
很多大学生在开心之际都准备入手一款iPhone,iPad或者macbook,有的同学想使用Apple 教育优惠价格购买,可又不知道怎么操作.接下来小编就和大家一起探讨下苹果在线商店购买教育优惠产品的具 ...
- 如何利用sql查找表中的重复数据?
编写一个SQL查询,查找学生表中所有重复的学生名: 分析思路 1.看到"找重复"的关键字眼,首先要用分组函数(group by),再用聚合函数中的计数函数count()给姓名列计数 ...
最新文章
- Java Volatile keyword
- 怎么寻回执行页内操作时的错误磁盘的数据
- Windows环境下IOCP和SELECT模型性能比较
- UDP(socket)接和数据案例封装成C++代码
- 「前端早读君007」css进阶之彻底理解视觉格式化模型
- [14-01] 闭包
- 在.net中读写config文件的各种方法(转)
- 《Linux编程》课堂测验 ·002【Shell编程】
- mysql关键字test_MySQL关键字Distinct的详细介绍
- jquery显示隐藏切换_jQuery显示,隐藏,切换
- 虚拟机的安装中遇到的问题(WIN10主机)
- ubuntu 串口调试工具_开源软件分享基于WPF的串口调试工具
- 将鼠标放在A标签上时浏览器左下角会显示跳转后界面地址,如何隐藏
- 压缩JPG图片大小而且不失真
- 泰克示波器TCP202电流探头的使用说明
- 数论--P8845 [传智杯 #4 初赛] 小卡和质数
- 笔记本电脑显示dns服务器出错,电脑出现dns错误无法上网的解决方法详解
- 风袖第一阶段之每周上新
- iphonex蓝牙打不开转圈_苹果6 plus蓝牙打不开总转圈怎么处理?
- office365:PowerPoint新功能设计器,让排版更轻松