Oracle数据库,这句话错在哪里?

来源:百度知道 编辑:UC知道 时间:2024/05/25 09:05:07
我建立了一个Oracle数据库。但是在查询上述语句时总是出错
select reader.rno , rname , bname , count(bno) from borrow , book , reader where reader.rno = borrow.rno and borrow.bno = book.bno and bpublish = ‘机械工业出版社’ group by reader.rno having count(bno)>=1 order by count(bno) ;

1、group by 后面的字段一定要在select后面存在(但是聚合函数除外,如count avg sum 等) ,反之则可以。
2、另外order by后面不可以使用聚合函数,可以使用别名。

根据你自己的需要选择其一:
一、
select reader.rno , rname , bname , count(bno) cnt from borrow , book , reader where reader.rno = borrow.rno and borrow.bno = book.bno and bpublish = ‘机械工业出版社’ group by reader.rno,rname,bname having count(bno)>=1 order by cnt;
二、
select reader.rno,count(bno) cnt from borrow , book , reader where reader.rno = borrow.rno and borrow.bno = book.bno and bpublish = ‘机械工业出版社’ group by reader.rno having count(bno)>=1 order by cnt ;

---
以上,希望对你有所帮助。

聚合函数的结果不能用在order by中的,单引号错误,改用英文的单引,而且聚合函数用法不对,group by时少了几项
select reader.rno , rname , bname , count from
(select reader.rno , rname , bname , count(bno) count from borrow , book , reader where reader.rno = borrow.rno and borrow.bno = book.bno and bpublish = '机械工业出版社' group by reader.rno,rname , bname having count(bno)>=1 ) order by count;