我想创建一个这样的视图:
create or replace view sales_num as
Select M.Medicine_name , M.Price , count(S.Sales_number)
from Medicine M Join Sales S
on (M.Code=S.Code)
gorup by M.Code ;
错误报告 -
SQL错误:ORA-00933:SQL命令未正确结束 00933. 00000 - “SQL命令未正确结束” *原因:
*操作:
有什么问题?即使我将拼写错误gorup
更正为group
,但它仍无效。
即使在纠正gorup
错字错误后仍然存在。
答案 0 :(得分:1)
有两个问题:
group
group by
时,select
列表中的每个元素必须是分组的元素或聚合值,但不能是其他元素。因此, Medicine_name 和 price 的选择都与此要求相冲突。根据您的期望,这是解决问题的一种方法:
Select M.Code,
Min(M.Medicine_name) as Medicine_name,
Min(M.Price) as Price,
Count(S.Sales_number)
from Medicine M
Join Sales S
on M.Code = S.Code
group by M.Code;
如果M.Code
是唯一标识符,则两个添加的Min()
聚合值将只返回预期的 Medicine_name 和 Price 。但这是标准SQL想要它的方式,并且Oracle遵循此规则,如Oracle docs中所述:
带有GROUP BY
子句的 SelectExpression 中的SelectItems 必须只包含聚合或分组列。
解决此问题的另一种方法是修改group by
列表:
Select M.Medicine_name,
M.Price,
Count(S.Sales_number)
from Medicine M
Join Sales S
on M.Code = S.Code
group by M.Medicine_name,
M.Price;
您也可以拥有多个中间解决方案。
答案 1 :(得分:1)
视图有两个问题:
group by
子句必须包含所有非聚合列此版本的视图将编译:
create or replace view sales_num as
select m.medicine_name ,
m.price ,
count(s.sales_number) tot_sales_number
from medicine m
join sales s on (m.code=s.code)
group by m.medicine_name,
m.price;