2013-11-26 52 views
6

我很難讓我的oracle開發人員查詢正確輸出。當我有avg函數時,它不會給我一個羣組錯誤。當我把它拿出來,它工作正常。我嘗試過使用group而不是order,但是它告訴我它不是一個表達式的組。SQL沒有一個組功能錯誤

SELECT LGBRAND.BRAND_ID, LGBRAND.BRAND_NAME, AVG(LGPRODUCT.PROD_PRICE)AS AVGER 
FROM LGPRODUCT, LGBRAND 
WHERE LGPRODUCT.BRAND_ID = LGBRAND.BRAND_ID 
ORDER BY BRAND_NAME; 

回答

13

當您在查詢中包含聚合函數(如avg,sum)時,您必須按未聚合的所有列進行分組。

SELECT LGBRAND.BRAND_ID, LGBRAND.BRAND_NAME, AVG(LGPRODUCT.PROD_PRICE)AS AVGER 
FROM LGPRODUCT, LGBRAND 
WHERE LGPRODUCT.BRAND_ID = LGBRAND.BRAND_ID 
GROUP BY 
LGBRAND.BRAND_ID, 
LGBRAND.BRAND_NAME 
ORDER BY BRAND_NAME 
2
SELECT LGBRAND.BRAND_ID, LGBRAND.BRAND_NAME, AVG(LGPRODUCT.PROD_PRICE)AS AVGER 
FROM LGPRODUCT, LGBRAND 
WHERE LGPRODUCT.BRAND_ID = LGBRAND.BRAND_ID 
GROUP BY LGBRAND.BRAND_ID, LGBRAND.BRAND_NAME 
ORDER BY BRAND_NAME; 

OR

SELECT LGBRAND.BRAND_ID, LGBRAND.BRAND_NAME, AVG(LGPRODUCT.PROD_PRICE)AS AVGER 
FROM LGPRODUCT INNER JOIN LGBRAND 
ON LGPRODUCT.BRAND_ID = LGBRAND.BRAND_ID 
GROUP BY LGBRAND.BRAND_ID, LGBRAND.BRAND_NAME 
ORDER BY BRAND_NAME; 

注意
每當一個聚集函數(SUM, COUNT, AVG, MIN, MAX, ..)在SELECT使用的所有其他列在選擇中不包含的任何聚合函數必須進入GROUP BY子句

0

您正在使用AGGREGATION函數,爲了這麼做必須將所有必須進行聚合的數據進行分組。

SELECT LGBRAND.BRAND_ID, LGBRAND.BRAND_NAME, AVG(LGPRODUCT.PROD_PRICE) AS AVGER 
    FROM LGPRODUCT, LGBRAND 
WHERE LGPRODUCT.BRAND_ID = LGBRAND.BRAND_ID 
group by LGBRAND.BRAND_ID, LGBRAND.BRAND_NAME -- This line here 
ORDER BY BRAND_NAME; 
0

對於新添加的領域,你沒有被使用爲好,因此您收到此錯誤,那麼通過包括新添加字段組由你解決這個錯誤,組中的所有數據會必須彙總。