count(*) 方法引发错误 sql 加上

count(*) method raises error sql plus

我正在尝试使用 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: not a GROUP BY expression

我很确定错误出在 count(*) 方法

我需要显示 cname no_of_orders,avg_order_amt,其中中间一列是订单总数,最后一列是该客户的平均订单金额。

这里是 table 客户和订单:

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)

我认为您在这里寻找的是:

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;

我正在猜测如何连接这两个表,您肯定需要这样做。

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;

您还缺少连接。按照您的查询方式,您将在 customerorders table 之间得到一个 cartesian plan,这意味着注册表数量是另一倍的注册表数量。