2014-11-02 69 views
0

我正在爲最近3個小時掙扎着這個錯誤,但是我找不到答案。SQL group by function error

select store.store_num 
     , Count(rental.rental_num) 
     , Count(employee.emp_ID) 
     , Avg(count(rental.rental_num)) 
from rental, employee, store 
where rental.emp_ID = employee.emp_ID 
and store.store_num = employee.store_num 
and rental.rent_date >= ’01-JAN-14’ 
Group by store.store_num 

它返回錯誤行號4,說

ORA-00937: not a single-group group function. 

你可以幫我嗎?

+2

'平均(計數(rental.rental_num))'在這種情況下沒有意義。 - 'count()'將返回一個標量,每個'grouping',所以平均值只有1的樣本。另外,考慮ANSI加入來代替連接的位置,除非你可能需要'count(distinct .. )'''rental_num'和'empID',除非你只需要排除空數。最後,我們可以假設'ORACLE'(而不是'mysql')給出錯誤嗎? – StuartLC 2014-11-02 08:05:42

回答

0

您正在加入商店租給員工。因此,您的COUNT()函數將返回相同的值(租金和員工的產品)。

你還沒有解釋你作業的邏輯,但讓我們猜測一下:你想知道每家商店的員工數量和每家商店的租金數量,再加上所有商店的平均租金數量。

爲了做到這一點,您需要多個查詢。在這裏,我已經定義了兩個子查詢來獲取基本計數,然後我將它們加入到主查詢中並用於導出平均值。

with emps as (select store.store_num 
        , count(*) as cnt 
       from employee, store 
       where store.store_num = employee.store_num 
       group by store.store_num) 
    , rntls as (select employee.store_num 
        , count(*) as cnt 
       from employee, rental 
       where rental.emp_ID = employee.emp_ID 
       and rental.rent_date >= date '2014-01-01' 
       group by employee.store_num) 
select emps.store_num 
     , rntl.cnt as rentals_count 
     , emps.cnt as employees_count 
     , avg(rntl.cnt) as rentals_avg 
from emps 
    , rntls 
where rntls.store_num = emps.store_num 
group by emps.store_num 
     , rntl.cnt 
     , emps.cnt 
/

順便說一句,你應該始終包括世紀中的任何日期字符串:2000年的錯誤並沒有消失,只是因爲它是2014年