如何从将新列显示为旧列中数据增加百分比的表中选择数据?



我正在学习SQL,我已经从我的书中被这个问题难住了一段时间。

本书中的问题在某种程度上是,我是一家书店的DBA。

所以,我有所有这些表(书籍、作者、出版商、客户、订单等)。我假设是由本书的作者(琼·卡斯蒂尔的甲骨文11g)创建的。

这个问题问我:

管理层提议提高每本书的价格。增加的金额将基于每本书的类别,按以下比例:计算机书籍,10%,健身书籍,15%,自助书籍,25%,所有其他类别,3%。创建一个列表,显示每本书的书名、类别、当前零售价和修订后的零售价。价格应以小数点后两位显示。输出的列标题应如下所示:标题、类别、当前价格和修订价格。按类别对结果进行排序。如果一个类别中有多个图书,则应对图书的书名执行二次排序。

创建一个文档以向管理层显示用于生成结果和语句结果的 SELECT 语句。

所以我知道在我的SQL语句中,我需要选择这些书的标题,书的类别,书的当前零售价,以及书的修订零售价。对于此修订后的零售价,我需要显示旧零售价的 % 增长,并按类别执行此操作。

这是我已经开始做的事情:

SELECT title, category, retail AS "Current Price", retail + (10/100) AS "New Price"
FROM books
WHERE category = 'COMPUTER';

但是,当我这样做时,我只从计算机类别的书籍中获得结果,我需要所有类别的结果,并按类别显示价格上涨的百分比。

我该怎么做才能将下一列创建为"新价格",并根据图书类别显示所有图书及其零售价格的特定增长百分比?

您可以使用CASE语句来执行此操作。

SELECT title, category, retail AS "Current Price", retail * CASE category WHEN 'COMPUTER' THEN 1.1 WHEN 'FITNESS' THEN 1.15 ELSE 1.03 END AS "New Price"
FROM books

我没有填写所有类别,您需要检查以确保您确切地知道它们在您的字段中的格式。

这样做:

SELECT title, category, retail AS "Current Price", retail + (10/100) AS "Revised Price"
FROM books
WHERE category IN ('COMPUTER', 'FITNESS', 'SELF HELP');

最新更新