count(*)方法引发错误sql plus

时间:2015-04-19 13:43:30

标签: sql oracle count

我正在尝试使用方法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)

2 个答案:

答案 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 plancustomer表之间得到orders,这意味着在另一次注册管理机构中注册管理机构的数量。