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;
您还缺少连接。按照您的查询方式,您将在 customer
和 orders
table 之间得到一个 cartesian plan
,这意味着注册表数量是另一倍的注册表数量。
我正在尝试使用 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;
您还缺少连接。按照您的查询方式,您将在 customer
和 orders
table 之间得到一个 cartesian plan
,这意味着注册表数量是另一倍的注册表数量。