2015-11-26 47 views
0

我試圖從Oracle表中的查詢中檢索一些結果。Oracle Group按表達式無效

目的是檢索屬於3個國家的所有競爭對手贏得的獎金總額:

這是我當前的查詢:

SELECT NATIONALITY, TOTALPRIZEMONEY 
FROM COMPETITOR 
WHERE NATIONALITY ='USA' 
AND NATIONALITY = 'AUSTRALIA' 
AND NATIONALITY = 'SINGAPORE' 
GROUP BY NATIONALITY; 

下面是我的表結構的屏幕截圖:

enter image description here

我收到錯誤:

ORA-00979: not a GROUP BY expression 
00979. 00000 - "not a GROUP BY expression" 

我可以在這個問題上請求幫助嗎?謝謝

+1

要「選擇」一個字段,它必須在您的「GROUP BY」中或者是一個聚合。 '選擇國籍,SUM(TOTALPRIZEMONEY)'***或***'民族團體,TOTALPRIZEMONEY'。 – MatBailie

+1

@MatBailie你是完全正確的,而不是提供的答案你的評論是賭注的解釋。您應該添加它作爲答案。 –

回答

1

GROUP BY與聚合查詢一起使用。例如...

SELECT NATIONALITY, sum(TOTALPRIZEMONEY) 
FROM COMPETITOR 
WHERE NATIONALITY IN ('USA', 'AUSTRALIA', 'SINGAPORE') 
GROUP BY NATIONALITY; 

在您的查詢,你是不是聚合任何東西,因此,沒有理由GROUP BY

從這GROUP Oracle文檔BY

A GROUP BY clause, part of a SelectExpression, groups a result into subsets that have matching values for one or more columns. In each group, no two rows have the same value for the grouping column or columns. NULLs are considered equivalent for grouping purposes.

You typically use a GROUP BY clause in conjunction with an aggregate expression.

+1

這不是真實的。你可以通過不使用聚合函數來使用group,你只需要在group by子句中添加select的所有字段! –

+0

@Drumbeg感謝您的幫助。但是,我在結果中收到空柱子。查詢能夠運行,但結果不顯示。 – gymcode

+0

@gymcode - 這是因爲你有'國籍='x'和國籍='y''。但是沒有一行可以同時存在,所以沒有任何行通過WHERE子句的條件。我希望你的意思是'國籍='x'或國籍='y''或者你可以使用'國籍'('x','y','z')' – MatBailie

1

正確的查詢看起來更像是這樣的:

SELECT SUM(TOTALPRIZEMONEY) 
FROM COMPETITOR 
WHERE NATIONALITY IN ('USA', 'AUSTRALIA', 'SINGAPORE'); 

,如果你想從國籍出來的效果,您只需要GROUP BY