SQL:在JOIN中重复数据

时间:2015-04-23 02:27:27

标签: sql oracle

我正在为我的班级做作业,我无法弄清楚如何正确回答这个问题:

“确定哪些图书产生的利润低于55%,以及已售出这些图书的副本数量。总结您的管理结果,并包含用于从数据库表格中检索数据的查询副本。”

我试过拍了一下,但我似乎无法按照我想要的方式出来。它总是有一些似乎没有结合在一起的数据。以下是我的代码:

SELECT isbn, b.title, b.cost, b.retail, o.quantity "# of times Ordered",
   ROUND(((retail-cost)/retail)*100,1)||'%' "Percent Profit", 
   o.quantity "# of times Ordered"
FROM books o JOIN orderitems o USING(isbn);

它的工作原理是我得到了我需要的数据,但它出现了这样:

enter image description here

我有一个理论认为,因为表“订单项目”具有多个具有相同isbn和不同数量的订单,所以它选择所有这些订单。有没有办法将它们结合起来?如果没有人可以帮助我摆脱JOIN引起的冗余数据?

谢谢!

2 个答案:

答案 0 :(得分:0)

我必须在SQL Server / MySQL中做类似的事情。您需要按照您在其中看到您不关心的重复数据的列进行分组,并且您需要对其值很重要的字段进行求和,可能是这样的......

SELECT isbn, b.title, b.cost, b.retail, o.quantity "# of times Ordered",
   ROUND(((retail-cost)/retail)*100,1)||'%' "Percent Profit", 
   SUM(o.quantity) "# of times Ordered"
FROM books o JOIN orderitems o USING(isbn)
GROUP BY isbn, b.title, b.cost, b.retail;

如果您需要更多信息,请转到此处并搜索SUM:https://docs.oracle.com/javadb/10.6.1.0/ref/rrefsqlj32654.html

答案 1 :(得分:-1)

SELECT title,sum(quantity),Round(((零售成本)/零售)* 100,0)Percent_Profit FROM books NATURAL JOIN orderitems按标题,成本,零售分组;