我正在尝试使用count(*)方法,但总是会出现错误。
这是代码
SQL> select c.cname,avg(o.ord_amt) avg_order_amt , count(*) no_of_order from customer c, orders o group b
y orderno;错误是:
ORA-00979:不是按表达式分组
我很确定这是count(*)方法的错误
我需要显示cname no_of_orders,avg_order_amt,中间列是订单总数,最后是该客户的平均订单数量。
这是客户和订单的表:
SQL> desc customer
Name Null? Type
----------------------------------------- -------- ----------------------------
CUSTNO NOT NULL NUMBER(3)
CNAME VARCHAR2(25)
CITY
VARCHAR2(12)
SQL> desc orders
Name Null? Type
----------------------------------------- -------- ----------------------------
ORDERNO NOT NULL NUMBER(3)
ODATE NOT NULL DATE
CUSTNO NUMBER(3)
ORD_AMT NUMBER(5)发布于 2015-04-19 13:55:03
Oracle不像mysql那样工作,您可以使用任何具有分组函数的列。它给您带来的错误是因为您将这些分组函数与列一起使用,而不是按该列进行分组。
因此,为了执行查询工作,您必须这样做:
select c.cname,
avg(o.ord_amt) avg_order_amt ,
count(*) no_of_order
from customer c,
orders o
group by c.cname;你也错过了一个连接。查询的方式将在customer和orders表之间获得一个orders,这意味着注册中心的数量是另一个注册表的数量的一倍。
发布于 2015-04-19 13:53:50
我觉得你要找的是:
select c.cname,
avg(o.ord_amt) avg_order_amt ,
count(*) no_of_order
from customer c,
join orders o on o.customer_id = c.customer_id
group by c.cname;我在猜测如何连接这两个表,这是您肯定需要做的。
https://stackoverflow.com/questions/29730649
复制相似问题