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上购买的图书产生的总利润额。显示 书名和利润。利润应格式化为显示美元符号和两位小数。考虑到客户可能不支付全部零售价,并且订购的每件商品都可能涉及多个副本。
因此,当尝试运行上述代码时,我得到错误“不是单组组功能”。我已尝试将整个语句分组在order#
和标题上,但是当我这样做时,我收到错误“FROM keyword not found not expected”。
答案 0 :(得分: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
。因此,您必须在查询中添加GROUP BY B.TITLE
。
答案 1 :(得分:0)
你的select子句中有一个sum(),你没有group by子句。这导致您的查询崩溃。
答案 2 :(得分: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
子句中包含sum()
。这表明聚合查询。如果没有group by
,SQL会假定将返回一行。但是,您有一个未聚合的字段b.title
- 因此错误。