[Day30]检视表、索引实作

在OE的order_items和product_infortation资料表中,依照产品被订购次数由多至少查看产品名称和被订购次数,从未被订购商品的名称也要查看。
说明:

  1. 由於要搜寻的资料表有两张:order_items和product_infortation,所以分类为复杂的资料表。
  2. 设检视表名称为product_sale_vu,栏位名称分别为product_name, sale_amount,架构如下:
CREATE OR REPLACE VIEW product_sale_vu
(product_name, sale_amount)
AS 子查询;
  1. 因为order_items内的资料表包含product_id和item_cnt,因此产品被订购次数可以放在资料表内(product_id的次数计算而来)。而同一张订单可同时下单多项产品,因此需要以product_id分组,再用count(*)计算。
SELECT product_id, COUNT(*) item_cnt
FROM order_items
GROUP BY product_id
  1. 由於product_name在product_infortation资料表中,因此需要将可查询被曾订购商品编号和被订购次数的上述SQL语句中当成子查询,并将product_infortation资料表合并,就可以在被订购商品编号product_id找到品名。
  2. 另一方面,因为也要查询从未被订购过的产品名称,所以要用RIGHT OUT JOIN把product_infortation资料表内无符合的订购产品编号的产品名称也合并(从未被订购的商品)。
    完整SQL语句:
CREATE OR REPLACE VIEW product_sale_vu
(product_name, sale_amount) AS
SELECT p.product_name, NVL(i.item_cnt,0)
FROM (SELECT product_id, COUNT(*) item_cnt
FROM order_items
GROUP BY product_id) i
RIGHT OUTER JOIN product_information p
ON i.product_id = p.product_id
order by 2 desc;

https://ithelp.ithome.com.tw/upload/images/20211015/20140915xh4Iz50k23.png

搜寻:

SELECT *
FROM product_sale_vu
WHERE sale_amount>16;

https://ithelp.ithome.com.tw/upload/images/20211015/20140915FnUPcLTalG.png

最後一篇了!希望有帮助到对资料库有疑问的人,有缘再见!


<<:  【第30天】最终回

>>:  [Day 30] PHP array_filter

Day14 - 解决状态大爆炸 - 2: Hierarchical States (阶层式状态)

同样的例子。 假设这次我希望某些状态是依赖於某些状态的! 比如说有输入有效(valid)跟输入无效(...

离职倒数14天:2020年学到最多的两件事,解答了我人生最大的困惑

今年年初回顾2020年时的日记里写着,去年学到最多的两件事:一个是趁着肺炎,工作後第一次回家长住,一...

Day26-不好意思,这里前方是一方通行啊!

嗨,各位早安 相信各位一定有听过"防火墙"这个东西吧? 之前我们前面讲过了ssh...

Day24-JDK可视化监控工具:jconsole(四)

前言 这会是jconsole工具的最後一篇介绍了,classes与VM Summary页签的介绍 我...

找LeetCode上简单的题目来撑过30天啦(DAY8)

题号;100 标题:Same Tree 难度;Easy Given the roots of two...