Abdulla
Abdulla

Reputation: 39

count(*) method raises error sql plus

I am trying to use the method count(*) but I always get an error.

here is the code

SQL> select c.cname,avg(o.ord_amt) avg_order_amt , count(*) no_of_order from customer c, orders o  group b
y orderno;

the error is:

ORA-00979: not a GROUP BY expression

I am pretty sure that the mistake is with count(*) method

I need to display the cname no_of_orders, avg_order_amt, where the middle column is total number of order and last is the average order amount for that customer.

Here is the table for customer and orders:

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)

Upvotes: 0

Views: 80

Answers (2)

Jorge Campos
Jorge Campos

Reputation: 23381

Oracle does not work as mysql does that you can group by any column with grouping functions. The error it is giving you is because you are using these grouping functions with a column and you are not grouping by that column.

So, in order to your query work you have to do this:

select c.cname, 
       avg(o.ord_amt) avg_order_amt , 
       count(*) no_of_order 
  from customer c, 
       orders o  
 group by c.cname;

You are also missing a join. The way your query are you will get a cartesian plan between the customer and the orders table which means amount of registries in one times amount of registries on the other.

Upvotes: 0

David Aldridge
David Aldridge

Reputation: 52386

I think that what you're looking for here is:

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;

I'm guessing on how to join those two tables, which you definitely need to do.

Upvotes: 2

Related Questions