SQL题目六

ABC在线销售公司业务系统

表结构:

1、表名:t_category (商品类别表)

字段(字段名/类型/长度):

类别编号 category_id INT

类别名称 category_name VARCHAR2(30)

2、表名:t_goods (商品表)

字段(字段名/类型/长度):

商品编号 goods_no CHAR(3)

商品名称 goods_name VARCHAR2(30)

商品价格 goods_price number(7,2)

所属类别 goods_category INT

点击次数 goods_click_num INT

3、 表名: t_saleinfo (销售信息表)

字段(字段名/类型/长度):

销售流水号 sid INT

商品编号 goods_no CHAR(3)

销售日期 sale_date date

销售数量 quantity INT

销售金额 amount number(10,2)

create table t_category(
category_id int primary key,
category_name varchar2(30)
); create table t_goods(
goods_no char(3) primary key,
goods_name varchar2(30) not null,
goods_price number(7,2) not null,
goods_category int not null,
goods_click_num int default 0,
constraint FK_GOODS_CATEGORY FOREIGN KEY (goods_category) references t_category(category_id)
); create table t_saleinfo(
sid int primary key,
goods_no char(3) not null,
sale_date date not null,
quantity int not null,
amount number(10,2) not null,
constraint FK_SALEINFO_GOODS FOREIGN KEY (goods_no) references t_goods(goods_no)
); -- 增加类别数据
insert into t_category values(1,'酒类');
insert into t_category values(2,'服装');
insert into t_category values(3,'书籍'); -- 商品数据
insert into t_goods values('G01','贵州茅台',550.56,1,128);
insert into t_goods values('G02','福建老酒',5.43,1,24);
insert into t_goods values('G03','泸州老窖',90.56,1,67);
insert into t_goods values('G04','剑南春',80.56,1,88);
insert into t_goods values('G05','七匹狼夹克',350.56,2,348);
insert into t_goods values('G06','七匹狼衬衫',105.43,2,908);
insert into t_goods values('G07','七匹狼男长裤',130.50,2,167);
insert into t_goods values('G08','七匹狼领带',280.00,2,388);
insert into t_goods values('G09','J2EE开发',50.50,3,236);
insert into t_goods values('G10','STRUTS应用',24.50,3,654);
insert into t_goods values('G11','ORACLE 11G',100.50,3,145);
insert into t_goods values('G12','dotnet技术',80.00,3,988); -- 销售数据
insert into t_saleinfo values(1,'G01',to_date('2008-1-1','yyyy-MM-dd'),50,50*550.56);
insert into t_saleinfo values(2,'G01',to_date('2008-1-2','yyyy-MM-dd'),25,25*550.56);
insert into t_saleinfo values(3,'G01',to_date('2008-1-3','yyyy-MM-dd'),31,31*550.56);
insert into t_saleinfo values(4,'G01',to_date('2008-1-4','yyyy-MM-dd'),43,43*550.56);
insert into t_saleinfo values(5,'G01',to_date('2008-1-5','yyyy-MM-dd'),55,55*550.56);
insert into t_saleinfo values(6,'G01',to_date('2008-1-6','yyyy-MM-dd'),102,102*550.56);
insert into t_saleinfo values(7,'G11',to_date('2008-1-6','yyyy-MM-dd'),82,82*100.5);
insert into t_saleinfo values(8,'G11',to_date('2008-1-7','yyyy-MM-dd'),202,202*100.5);

题目:

1、查询酒类商品的总点击量

2、查询各个类别所属商品的总点击量,并按降序排列

3、查询所有类别中最热门的品种(点击量最高),并按点击量降顺序排列

4、查询茅台的销售情况,按日期升序排列

格式如下:

商品编号 商品名称 销售日期 销售数量 销售金额 累计数量 累计金额

1 茅台 2011-12-1 10 7000 10 7000

1 茅台 2011-12-2 15 10500 25 17500

第一个问题思路(查询酒类商品的总点击量)

-- 解一:
-- 笛卡尔积 内联两张表
select * from t_goods a inner join t_category b
on a.goods_category=b.category_id; -- 查询酒类 笛卡尔积
select * from t_goods a inner join t_category b
on a.goods_category=b.category_id and b.category_name='酒类'; -- 按照酒名分组查询 获取酒类的总点击量
select b.category_name, sum(a.goods_click_num) total_click
from t_goods a inner join t_category b
on a.goods_category=b.category_id
and b.category_name='酒类'
group by b.category_name; -- '酒类' 替换了category_name列下的值
select '酒类' category_name, sum(a.goods_click_num) total_click
from t_goods a inner join t_category b
on a.goods_category=b.category_id and b.category_name='酒类'; -- 解二:
-- 子查询 解法
select category_id from t_category
where category_name='酒类'; select GOODS_CATEGORY,goods_click_num from t_goods
where goods_category in
(
select category_id
from t_category
where category_name='酒类'
); select '酒类' category_name,sum(goods_click_num) total_click
from t_goods
where goods_category in
(
select category_id
from t_category
where category_name='酒类'
);

第二个问题思路(查询每个类别所属商品的总点击量,并按降序排列)

-- 按所属类别分组 查询商品类别 类别商品总点击量
select goods_category,sum(goods_click_num)
from t_goods
group by goods_category; -- 降序 按商品表类别分组 各个类别商品点击量总和 降序
select goods_category,sum(goods_click_num) total_click
from t_goods
group by goods_category
order by sum(goods_click_num) desc; select goods_category,sum(goods_click_num) total_click
from t_goods a inner join t_category b
on a.goods_category = b.category_id
group by goods_category
order by sum(goods_click_num) desc; -- 划分归属
select goods_category,category_name,sum(goods_click_num) total_click
from t_goods a inner join t_category b
on a.goods_category = b.category_id
group by goods_category,category_name
order by sum(goods_click_num) desc; -- 划别名 按类别分组 按最高点击商品表中各个类别最高点击量 降序
select a.goods_category,b.category_name,sum(a.goods_click_num) total_click
from t_goods a inner join t_category b
on a.goods_category = b.category_id
group by goods_category,category_name
order by sum(a.goods_click_num) desc;

第三个问题思路(查询所有类别中最热门的品种(点击量最高),并按点击量降顺序排列 )

-- 查询商品表各个类别,最大点击量
select goods_category, max(goods_click_num) max_click
from t_goods
group by goods_category; -- 获取一张 按照商品类别分组的 新商品表
select * from
(
select goods_category, max(goods_click_num) max_click
from t_goods
group by goods_category
)a inner join t_goods b
on a.goods_category=b.goods_category
and a.max_click=b.goods_click_num; -- 笛卡尔积三表 用where筛选数据 寻找点击量高的的商品
select * from
(
select goods_category, max(goods_click_num) max_click
from t_goods
group by goods_category
)a,t_goods b,t_category c
where a.goods_category=b.goods_category
and a.max_click=b.goods_click_num
and c.category_id=a.goods_category; -- 按照 原商品表的各个类别热门最大点击量降序
select * from
(
select goods_category, max(goods_click_num) max_click
from t_goods
group by goods_category
)a,t_goods b,t_category c
where a.goods_category=b.goods_category
and a.max_click=b.goods_click_num
and c.category_id=a.goods_category
order by a.max_click desc; -- 查询商品表中点击最高(即 热门)的商品,并查询相关类别信息 按最大点击量降序
select c.category_id,c.category_name,b.goods_no,b.goods_name,a.max_click
from
(
select goods_category, max(goods_click_num) max_click
from t_goods
group by goods_category
)a,t_goods b,t_category c
where a.goods_category=b.goods_category
and a.max_click=b.goods_click_num
and c.category_id=a.goods_category
order by a.max_click desc;

第四个问题思路(查询茅台的销售情况,按日期升序排列)

-- 获取'贵州茅台'商品编号
select goods_no from t_goods where goods_name='贵州茅台'; -- 商品编号内联 限制为'贵州茅台'商品编号
select * from t_saleinfo a
inner join t_saleinfo b
on a.goods_no=b.goods_no and a.goods_no=
(
select goods_no from t_goods where goods_name='贵州茅台'
); -- 销售日期 升序
select * from t_saleinfo a
inner join t_saleinfo b
on a.goods_no=b.goods_no and a.goods_no=
(
select goods_no from t_goods where goods_name='贵州茅台'
)
order by a.sale_date; -- 增加销售日期限制
select * from t_saleinfo a
inner join t_saleinfo b
on a.goods_no=b.goods_no and a.goods_no=
(
select goods_no from t_goods where goods_name='贵州茅台'
)
and a.sale_date>=b.sale_date
order by a.sale_date; -- 增加商品编号限制
select a.sale_date,a.quantity,sum(b.quantity),sum(b.amount)
from t_saleinfo a inner join t_saleinfo b
on a.goods_no=b.goods_no
and a.goods_no=
(
select goods_no from t_goods where goods_name='贵州茅台'
)
and a.sale_date>=b.sale_date
group by a.sale_date,a.quantity; -- 销售日期 升序
select a.sale_date,a.quantity,sum(b.quantity),sum(b.amount)
from t_saleinfo a inner join t_saleinfo b
on a.goods_no=b.goods_no
and a.goods_no=
(
select goods_no from t_goods where goods_name='贵州茅台'
)
and a.sale_date>=b.sale_date
group by a.sale_date,a.quantity
order by a.sale_date; select a.sale_date,a.quantity day_quantity,max(a.amount) day_amount,sum(b.quantity) total_quantity,sum(b.amount) total_amount
from t_saleinfo a inner join t_saleinfo b
on a.goods_no=b.goods_no
and a.goods_no=
(
select goods_no from t_goods where goods_name='贵州茅台'
)
and a.sale_date>=b.sale_date
group by a.sale_date,a.quantity
order by a.sale_date; -- 获取商品销售信息
select d.goods_no,d.goods_name,e.category_name,c.*
from
(
select max(a.goods_no) goods_no,
a.sale_date,a.quantity day_quantity,
max(a.amount) day_amount,
sum(b.quantity) total_quantity,
sum(b.amount) total_amount
from t_saleinfo a inner join t_saleinfo b
on a.goods_no=b.goods_no and a.goods_no=
(
select goods_no from t_goods where goods_name='贵州茅台'
)
and a.sale_date>=b.sale_date
group by a.sale_date,a.quantity
order by a.sale_date
)c,t_goods d, t_category e
where c.goods_no=d.goods_no
and d.goods_category=e.category_id;

笔记

视图

-- 创建视图
create view v_day_sale_statis as
select d.goods_no,d.goods_name,e.category_name,c.*
from
(
select max(a.goods_no) goods_no,a.sale_date,a.quantity day_quantity,max(a.amount) day_amount,sum(b.quantity) total_quantity,sum(b.amount) total_amount
from t_saleinfo a inner join t_saleinfo b
on a.goods_no=b.goods_no
and a.goods_no=
(
select goods_no from t_goods where goods_name='贵州茅台'
)
and a.sale_date>=b.sale_date
group by a.sale_date,a.quantity
order by a.sale_date
)c,t_goods d, t_category e
where c.goods_no=d.goods_no
and d.goods_category=e.category_id; -- 查询用户视图
select * from user_views; -- 查询视图
select * from v_day_sale_statis; -- 删除视图
drop view v_day_sale_statis; -- 查找某个视图
select * from dba_views where view_name = "User_tables"; -- 创建视图注释
comment on column v_day_sale_statis.table_name is 'Name of the table';

索引

-- 创建索引(加快查找速度)
create index clicknum_idx on t_goods(goods_click_num); -- 查找用户索引
select * from user_indexes;

Oracle语法 及 SQL题目(三)的更多相关文章

  1. Oracle语法 及 SQL题目(一)

    目录 课例复制 SQL题目一 SQL题目二 SQL题目三 笔记 课例复制 OCM 全称:Oracle Certified Master 认证大师 含义:Oracle 原厂推出的数据库方向最高级别认证 ...

  2. Oracle语法 及 SQL题目(二)

    目录 课例复制 思考题四 解题思路 思考题五 解题思路 课例复制 思考题四 最近,经过你的努力,你得到了一份工作,成为了百货公司的一位经理. 到位后,你发现你的销售数据库中有两张表,一个是商店促销时间 ...

  3. Oracle中PL/SQL简介、基本语法以及数据类型

    Oracle中PL/SQL简介.基本语法以及数据类型 一.PL/SQL简介. Oracle PL/SQL语言(Procedural Language/SQL)是结合了结构化查询和Oracle自身过程控 ...

  4. 【SQL】Oracle的PL/SQL语法及其拓展数据类型总结

    PL/SQL语法 PL/SQL程序由三部分组成,声明部分.执行部分.异常处理部分. 模板: DECLARE /*变量声明*/ BEGIN /*程序主体*/ EXCEPTION /*异常处理部分*/ E ...

  5. ansi sql 语法 切换为 oracle 语法

        语句粘贴到 工作表 打开查询构建器 勾选 创建oracle连接 over     sql dev 的语法设置调整,否则表别名会右对齐   下面是 转换后的结果,是不是看得舒服多了

  6. Oracle DBA常用SQL

    监控SQL 1.监控事例的等待: select event,sum(decode(wait_time,0,0,1)) prev, sum(decode(wait_time,0,1,0)) curr,c ...

  7. oracle中动态SQL详解

    部分内容参考网上资料 1.静态SQLSQL与动态SQL Oracle编译PL/SQL程序块分为两个种:其一为前期联编(early binding),即SQL语句在程序编译期间就已经确定,大多数的编译情 ...

  8. Oracle Database 11g : SQL 基础

    简介 1:课程目标 2:课程 目标 3:Oracle Database 11g 以及相关产品概览 1:Oracle Database 11g :重点领域 2:Oracle Fusion Middlew ...

  9. oracle中动态SQL使用详细介绍

    Oracle编译PL/SQL程序块分为两个种:通常静态SQL采用前一种编译方式,而动态SQL采用后一种编译方式,需要了解的朋友可以参考下     1.静态SQLSQL与动态SQL Oracle编译PL ...

随机推荐

  1. Vscode配置springboot开发环境变量

    先安装必要的插件 然后在左下角setting 打开setting 配置setting.json文件 ,主要是配置了用户设置 这里面主要配置jdk环境和maven,建议下载vscode推荐的openjd ...

  2. Laravel5.6---从头做一个项目web

    简介:类似论坛的项目,纯web,响应式,主要包含登录注册.支付.评论.富文本.文章列.个人中心等 目录: 1.初始化项目 ======================================= ...

  3. navicat for mysql 链接时报错:1251-Client does not support authentication protocol requested by server

    客户端使用navicat for mysql.本地安装了mysql 8.0.但是在链接的时候提示: 主要原因是mysql服务器要求的认证插件版本与客户端不一致造成的. 打开mysql命令行输入如下命令 ...

  4. thinkphp概述

    thinkphp框架是一个免费的,开源,快速,简单的面向对象的轻量级PHP开发框架. 了解什么是thinkphp概述,thinkphp项目目录结构,thinkphp的控制器,视图,thinkphp项目 ...

  5. spice在桌面虚拟化中的应用系列之二(Linux平台spice客户端的编译安装,支持USB映射)

    1.系统环境 1.1 测试环境 centos6.4最小化安装(centos6.x桌面版也适用) 使用yum源为163源加EPEL源 1.2 spice客户端介绍 spice作为远程连接工具,可以支持远 ...

  6. 迷你商城后台管理系统————stage1需求分析

    PS:迷你商城后台管理系统---需求分析.docx下载~click me 迷你商城后台管理系统-- 需求分析 1. 引言 作为互联网热潮的崛起,消费者们的普遍差异化,实体商城要想在互联网的浪潮中继续发 ...

  7. 国际化(i18n) 各国语言缩写

    internationalization (国际化)简称:i18n,因为在i和n之间还有18个字符,localization(本地化 ),简称L10n. 一般用语言_地区的形式表示一种语言,如:zh_ ...

  8. WXS介绍

    WXS(WeiXin Script)是小程序的一套脚本语言,结合 WXML,可以构建出页面的结构. 1.WXS与JS的区别 1.1 WXS 的基础类库: WXS 只提供给开发者5个基础类库,分别是 c ...

  9. 《你们都是魔鬼吗》实验十二 团队作业八:Alpha冲刺

    <你们都是魔鬼吗>第八次团队作业:Alpha冲刺 项目 内容 这个作业属于哪个课程 任课教师博客主页链接 这个作业的要求在哪里 作业链接地址 团队名称 你们都是魔鬼吗 作业学习目标 软件测 ...

  10. vue-cli 3 按需引入 element-ui

    1.安装按需引入必要插件 npm install babel-plugin-component --save-dev 2.修改babel.config.js 3.在main.js中引入用到的组件,例如 ...