Sql ORA-00979:不是orderdetails的GROUP BY表达式

Sql ORA-00979:不是orderdetails的GROUP BY表达式,sql,oracle,group-by,Sql,Oracle,Group By,此sql语句有什么问题,我不断遇到以下错误: SQL错误:ORA-00979:不是GROUP BY表达式 97900000-不是表达式的分组 *原因: *行动: 如果我有另一个变量,比如Shipped SELECT orderdetails.orderid, orderdate, NVL2(Shippeddate, "Not Shipped" , "Shipped" ) as "Shipped" ,sum (quantity *( unitprice - unitprice * discount

此sql语句有什么问题,我不断遇到以下错误:

SQL错误:ORA-00979:不是GROUP BY表达式 97900000-不是表达式的分组 *原因: *行动:


如果我有另一个变量,比如Shipped

SELECT orderdetails.orderid, orderdate, NVL2(Shippeddate, "Not Shipped" , "Shipped" ) as "Shipped" ,sum (quantity *( unitprice - unitprice * discount))as "Order Total" FROM orderdetails
INNER JOIN orders orders on orderdetails.orderid = orders.orderid
WHERE customerid = 'ERNSH'
GROUP BY orderdetails.orderid , orderdate, Shipped
ORDER BY "Order Total" desc;

将orderdate添加到GROUP BY子句:

select orderdetails.orderid,
    orderdate,
    sum(quantity * (unitprice - unitprice * discount)) as "Order Total"
from orderdetails
inner join orders orders on orderdetails.orderid = orders.orderid
where customerid = 'ERNSH'
group by orderdetails.orderid, orderdate
order by "Order Total" desc;
或者,如果列不应位于group by子句中,则对该列使用聚合函数:

select orderdetails.orderid,
    max(orderdate) as orderdate,   ---  see which function is suitable
    sum(quantity * (unitprice - unitprice * discount)) as "Order Total"
from orderdetails
inner join orders orders on orderdetails.orderid = orders.orderid
where customerid = 'ERNSH'
group by orderdetails.orderid
order by "Order Total" desc;
以上两个在语法上是正确的,但在逻辑上你必须做出决定


此外,如果可能的话,尝试使用较小的别名来干净地编写查询,并使用别名/表名一致地限定列名。

将orderdate添加到GROUP BY子句GROUP BY ORDERDDETAILS.orderid,orderdate将表订单别名为orders的任何原因?唯一可能的用法是,您可以通过名称顺序而不是名称顺序来引用它。我看不出有什么意义……为什么我们必须在group by子句中包含orderdate,而不必包含订单总额?与group by orderdetails.orderid、orderdate、Order TotalGroup by子句类似,group by子句必须在SELECT子句中包含所有非聚合列/表达式。订单总数是聚合的结果。因此,不存在于组中。这正是为什么我不需要在第二个查询的group by子句中包含orderdate的原因,因为我们在该列上使用了聚合函数。如果我有另一个变量,如SHIFED??选择orderdetails.orderid,orderdate,NVL2Shippeddate,Not Shipped,Shipped as Shipped,sum quantity*unitprice-unitprice*Deffantas Order Total FROM orderdetails内部联接orders orders on orderdetails.orderid=orderid,其中customerid='ERNSH'按orderdetails分组。orderid,orderdate,按订单总描述发货;
select orderdetails.orderid,
    max(orderdate) as orderdate,   ---  see which function is suitable
    sum(quantity * (unitprice - unitprice * discount)) as "Order Total"
from orderdetails
inner join orders orders on orderdetails.orderid = orders.orderid
where customerid = 'ERNSH'
group by orderdetails.orderid
order by "Order Total" desc;