我正在尝试使用方法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:不是GROUP BY表达式
我很确定错误在于count(*)
方法
我需要显示cname no_of_orders,avg_order_amt,其中中间列是订单总数,last是该客户的平均订单金额。
以下是客户和订单的表格:
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)
答案 0 :(得分:2)
我认为你在这里寻找的是:
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;
我猜测如何加入这两个表,你肯定需要这样做。
答案 1 :(得分:0)
Oracle不能像mysql那样工作,你可以group by
任何具有分组功能的列。它给你的错误是因为你正在使用这些分组函数和列,而你没有按该列分组。
因此,为了您的查询工作,您必须这样做:
select c.cname,
avg(o.ord_amt) avg_order_amt ,
count(*) no_of_order
from customer c,
orders o
group by c.cname;
您也错过了加入。您的查询方式将在cartesian plan
和customer
表之间得到orders
,这意味着在另一次注册管理机构中注册管理机构的数量。