SQL“不是单组组函数”查询时出错

时间:2013-03-19 22:54:44

标签: sql oracle

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”

3 个答案:

答案 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 - 因此错误。