题目大概意思:
找出网红带来的订单号和销售额(销售额是该订单的,比如凑单),满足是优惠码是1的,B类商品
数据表两个,分别是订单和品类
CREATE TABLE 订单
(订单号 VARCHAR(512),商品号 VARCHAR(512),支付金额 INT,优惠券码 INT
);INSERT INTO 订单 (订单号, 商品号, 支付金额, 优惠券码) VALUES ('00A', 'sku01', '60', '01');
INSERT INTO 订单 (订单号, 商品号, 支付金额, 优惠券码) VALUES ('00A', 'sku02', '40', '01');
INSERT INTO 订单 (订单号, 商品号, 支付金额, 优惠券码) VALUES ('00B', 'sku02', '60', '02');
INSERT INTO 订单 (订单号, 商品号, 支付金额, 优惠券码) VALUES ('00C', 'sku03', '40', '03');
INSERT INTO 订单 (订单号, 商品号, 支付金额, 优惠券码) VALUES ('00C', 'sku01', '80', '03');
INSERT INTO 订单 (订单号, 商品号, 支付金额, 优惠券码) VALUES ('00C', 'sku06', '60', '03');
INSERT INTO 订单 (订单号, 商品号, 支付金额, 优惠券码) VALUES ('00D', 'sku04', '80', '01');
INSERT INTO 订单 (订单号, 商品号, 支付金额, 优惠券码) VALUES ('00D', 'sku05', '80', '01');
INSERT INTO 订单 (订单号, 商品号, 支付金额, 优惠券码) VALUES ('00E', 'sku02', '80', '04');
INSERT INTO 订单 (订单号, 商品号, 支付金额, 优惠券码) VALUES ('00E', 'sku04', '80', '04');CREATE TABLE 品类表
(商品号 VARCHAR(512),商品类型 VARCHAR(512)
);INSERT INTO 品类表 (商品号, 商品类型) VALUES ('sku01', 'A');
INSERT INTO 品类表 (商品号, 商品类型) VALUES ('sku02', 'B');
INSERT INTO 品类表 (商品号, 商品类型) VALUES ('sku03', 'C');
INSERT INTO 品类表 (商品号, 商品类型) VALUES ('sku04', 'C');
INSERT INTO 品类表 (商品号, 商品类型) VALUES ('sku05', 'A');
INSERT INTO 品类表 (商品号, 商品类型) VALUES ('sku06', 'C');
解题思路记录
-- 1、先找出这个红人的订单号
SELECT a.订单号,a.商品号,a.支付金额,a.优惠券码,b.商品类型
FROM 订单 as a
INNER JOIN 品类表 AS b
on a.商品号 = b.商品号
WHERE a.优惠券码=1 AND b.商品类型 = "B"
-- 2、找出该订单号的利润
SELECT count(DISTINCT q.订单号) AS "网红带单数",sum(q.支付金额) AS "网红带货总金额"
FROM 订单 AS q
WHERE q.订单号 IN(
SELECT a.订单号
FROM 订单 as a
INNER JOIN 品类表 AS b
on a.商品号 = b.商品号
WHERE a.优惠券码=1 AND b.商品类型 = "B"
)
自己做题的错误记录
1 、子查询in中我是只要订单号单列,而子查询里是两个列,这是错误的。必须严格列相等对应,单对单,多对多。
2、in子查询中不能在跟别名
本文学习的是猴子数据分析的SQL面试宝典,自己学习sql刷题做记录!