2017-08-13 48 views
7

ai đó có thể giải thích cho tôi tại sao truy vấn này yêu cầu mệnh đề GROUP BY trong Oracle trong khi hoàn toàn tốt trong MSSQL, MySQL, Postgresql?Tại sao truy vấn này yêu cầu nhóm theo mệnh đề trong Oracle

select count(*)/(select count(*) from dual)from dual 

Oracle phàn nàn

"[Error] Execution (1: 27): ORA-00937: not a single-group group function" 

Nếu tôi thay đổi nó và thêm nhóm giả bởi như thế này

select count(*)/(select count(*) from dual)from dual 
group by null 

thì đó là tốt cho Oracle. Tại sao Oracle yêu cầu nhóm này?

+0

Bạn có thể vui lòng cung cấp truy vấn thực, ví dụ của bạn không có ý nghĩa gì không. –

+0

Tôi đã cung cấp cái này để làm cho nó trừu tượng như nó có thể nhưng tất nhiên đây là một từ Northwind DB. select sum (UnitPrice * Quantity)/(chọn count (*) từ Orders) từ OrderDetails – olek

+0

@WernfriedDomscheit - Nếu thay đổi 'dual' bằng bất kỳ bảng thực, kết quả sẽ giống nhau –

Trả lời

0

MySQL có một số cú pháp không hợp lệ trong ANSI SQL. về cơ bản, ở đây, bạn có một count(*) là một hàm tổng hợp. Một mình, nó không yêu cầu group by nhưng nếu bạn thêm select count(*) mà có thể phụ thuộc vào dòng của bạn - nó không phải là trường hợp ở đây, nhưng bạn có thể tham gia nội bộ - sau đó select thứ hai của bạn không phải là một hằng số, và bạn nên chúng tôi group by .

0

Theo như tôi biết, truy vấn đầu tiên của bạn:

select count(*)/(select count(*) from dual)from dual 

Sql sẽ hiểu Count () như là một cột và (select count () từ kép) như là một cột thứ hai => Bạn phải nhóm theo cột thứ hai.

Ví dụ:

select count(*), (select count(1) from dual)from dual 

Nó sẽ ném những lỗi tương tự. Nhưng nếu bạn nhóm theo cột thứ hai, nó sẽ là sự thật. Ví dụ

select count(*), (select count(1) from dual)from dual 
group by 1 
Các vấn đề liên quan