selectsum(销售额) as 销售额from 临时表where 品类号 in(12,33,45,99,1001)andyear(月份) =2019group by 电商平台,品牌号,品类号;
查询结果
把临时表的 sql 套入上面就得到最终的 sql:
select a.品牌号,品牌名,b.品类号,品类名,电商平台,sum(销售额) as 销售额from 品牌表 as a inner join 月销售统计表 as con a.品牌号 = c.品牌号inner join 品类表 as bon b.品类号 = c.品类号where 品类号 in(12,33,45,99,1001)andyear(月份)=2019group by a.品牌号,品牌名,b.品类号,品类名,电商平台;
select*from 品牌表 as a left join 月销售统计表 as con a.品牌号 = c.品牌号;
查询结果
把上面查询结果当做临时表。
2. 筛选条件:2019 年
select*from 临时表whereyear(月份) =2019;
查询结果
3. 不同品类号的单月单平台的销售额
也就是每个品类号每个月每个平台,涉及到 “每个” 需要用到分组汇总。
selectsum(销售额)from 临时表whereyear(月份) =2019group by 品类号,月份,电商平台;
查询结果
4.5 个以上 (含 5 个) 不同品类号
需要用 count,distinct 筛选出符合条件的数据。
selectsum(销售额) as 销售额from 临时表whereyear(月份) =2019group by 品类号,月份,电商平台havingcount(distinct 品类号) >=5;
查询结果
5. 销售额大于等于 10000
selectsum(销售额) as 销售额from 临时表whereyear(月份) =2019group by 品类号,月份,电商平台havingcount(distinct 品类号) >=5and 销售额>=10000;
查询结果
输出格式如下:
把临时表的 sql 套入上面就得到最终的 sql:
select a.品牌号,品牌名,count(distinct 品类号) as 品类号数量from 品牌表 as a left join 月销售统计表 as con a.品牌号 = c.品牌号whereyear(月份) =2019group by a.品牌号,品牌名,月份,电商平台havingcount(distinct 品类号) >=5and 销售额>=10000;
select*from 品牌表 as a left join 月销售统计表 as c on a.品牌号 = c.品牌号;
把查询结果当做临时表。
2.筛选条件:2019 年
select*from 临时表whereyear(月份) =2019;
查询结果
3. 只在电商平台 1 上有销售额的品牌 (即平台 2 的累计销售额为 0)
需要用 group by 对品牌号,电商平台分组,用 having 筛选出平台为 2 且销售额为 0 的品牌号作为子查询
select a.品牌号from 临时表whereyear(月份) =2019group by a.品牌号,电商平台having 电商平台 =2andsum(销售额) =0;
查询结果
4. 电商平台 1 的累计销售额最大的 Top30 个品牌及对应的销售额
观察输出格式要求。
可以看出需要要用 group by 对品牌号,品牌名,电商平台分组,
用 having 和 in 筛选出平台为 1 且在平台 2 销售额为 0 的 Top30 个品牌号,品牌名及对应的销售额。
并用 order by 对销售额排序, 并用 limit 取前 30 项
select a.品牌号,sum(销售额) as'平台1总销售额'from 临时表whereyear(月份) =2019group by a.品牌号,电商平台having 电商平台 =1and a.品牌号 in (子查询)order bysum(销售额) desclimit30;
查询结果
观察输出格式要求:
最终答案:
select a.品牌号,品牌名,sum(销售额) as'平台1总销售额'from 品牌表 as a left join 月销售统计表 as c on a.品牌号 = c.品牌号whereyear(月份) =2019group by a.品牌号,品牌名,电商平台having 电商平台 =1and a.品牌号 in (select a.品牌号from 品牌表 as a left join 月销售统计表 as c on a.品牌号 = c.品牌号whereyear(月份) =2019group by a.品牌号,电商平台having 电商平台 =2andsum(销售额) =0)order bysum(销售额) desclimit30;
查询结果
问题 4:查询 2019 年在两个电商平台中分别同时都能进入销售额 Top 50 的品牌及对应的全电商平台累计销售额,输出格式如下
select 品牌号,sum(总销售额) as 平台总销售额from (select*,row_number() over (partitionby 电商平台order by 总销售额 desc) as rankingfrom 销售统计表) as awhere ranking <=2group by 品牌号havingcount(电商平台) >=2;
select 品牌号,sum(总销售额) as 全平台累计销售额from (select*,row_number() over (partitionby 电商平台order by 总销售额 desc) as rankingfrom 销售统计表) as awhere ranking <=50group by 品牌号havingcount(电商平台) >=2;
select a.品牌号,a.品牌名,全平台累计销售额from 品牌表 as a right join 前五十品牌号 as bon a.品牌号 = b.品牌号where a.品牌号 in (b.品牌号)group by a.品牌号,a.品牌名;
查询结果
最终答案:
with 销售统计表(品牌号,电商平台,总销售额)as(select 品牌号,电商平台,sum(销售额) as 总销售额from 月销售统计表whereyear(月份) =2019group by 品牌号,电商平台),前五十品牌号 as(select 品牌号,sum(总销售额) as 全平台累计销售额from (select*,row_number() over(partitionby 电商平台order by 总销售额 desc) as rankingfrom 销售统计表) as awhere ranking <=50group by 品牌号havingcount(电商平台) >=2)select a.品牌号,a.品牌名,全平台累计销售额from 品牌表 as a right join 前五十品牌号 as bon a.品牌号 = b.品牌号where a.品牌号 in (b.品牌号)group by a.品牌号,a.品牌名;