1
SELECT B.TITLE, TO_CHAR(SUM((B.COST*OI.QUANTITY)-OI.PAIDEACH), '$999.99')
AS "Profit"
FROM ORDERS O JOIN ORDERITEMS OI
on o.order# = oi.order#
JOIN BOOKS B ON OI.ISBN = B.ISBN
WHERE O.ORDER# = 1002;

目标

确定在订单 1002 上购买的图书产生的总利润金额。显示书名和利润。利润的格式应显示一个美元符号和两位小数。考虑到客户可能不会支付全部零售价,并且订购的每件商品都可能涉及多份。

问题

因此,当尝试运行上述代码时,我收到错误"not a single-group group function"。我已经尝试将整个语句order#和标题分组,尽管当我这样做时,我得到错误"FROM keyword not found where expected"

4

3 回答 3

1

那么你的问题的一部分是你错过了这个GROUP BY条款:

SELECT B.TITLE, 
  TO_CHAR(SUM((B.COST*OI.QUANTITY)-OI.PAIDEACH), '$999.99') AS "Profit"
FROM ORDERS O 
JOIN ORDERITEMS OI
  on o.order# = oi.order#
JOIN BOOKS B 
  ON OI.ISBN = B.ISBN
WHERE O.ORDER# = 1002
GROUP BY B.TITLE;

无论何时使用聚合函数,都需要为GROUP BY选择列表中但不在聚合函数中的列包含 a。所以你必须在GROUP BY B.TITLE你的查询中添加一个。

于 2013-03-19T22:57:06.777 回答
0

您的 select 子句中有一个 sum() 并且没有 group by 子句。这导致您的查询崩溃。

于 2013-03-19T22:56:49.953 回答
0

你需要一个group by子句:

SELECT B.TITLE, TO_CHAR(SUM((B.COST*OI.QUANTITY)-OI.PAIDEACH), '$999.99')
AS "Profit"
FROM ORDERS O JOIN ORDERITEMS OI
on o.order# = oi.order#
JOIN BOOKS B ON OI.ISBN = B.ISBN
WHERE O.ORDER# = 1002
group by b.title

出现您的问题是因为该select子句中有 a sum()。这表明聚合查询。如果没有group by,SQL 假定将返回一行。但是,您有一个b.title未聚合的字段 - 因此出现错误。

于 2013-03-19T22:57:14.463 回答