2012-12-19 65 views
4

我對數據庫比較陌生。我正在使用Oracle,我試圖執行這個查詢來查找成員擁有的個人培訓課程的數量。不是GROUP BY表達式錯誤

這些表是;

成員

MEMBERS_ID(NUMBER), 
MEMBERSHIP_TYPE_CODE(VARCHAR), 
ADDRESS_ID(NUMBER), CLUB_ID(NUMBER) 
MEMBER_NAME(VARCHAR), 
MEMBER_PHONE(VARCHAR), 
MEMBER_EMAIL(VARCHAR) 

PERSONAL_TRAINING_SESSIONS

SESSION_ID(VARHCAR), 
MEMBER_ID (NUMBER), 
STAFF_ID(VARCHAR), 
SESSION_DATETIME(DATE) 

我查詢returing此錯誤:

ORA-00979: not a GROUP BY expression 00979. 00000 - "not a GROUP BY expression" *Cause:
*Action: Error at Line: 1 Column: 8

SELECT MEMBERS.MEMBER_ID,MEMBERS.MEMBER_NAME, COUNT(personal_training_sessions.session_id) 
FROM MEMBERS JOIN personal_training_sessions 
ON personal_training_sessions.member_id=members.member_id 
GROUP BY personal_training_sessions.session_id; 

任何人都可以指向正確的方向嗎?我看了看周圍,我需要分開計數查詢嗎?

+1

我強烈建議通過一個教程,並與一些選擇玩看看有什麼可能的。 – Ben

回答

6

錯誤說,這一切,你沒有通過MEMBERS.MEMBER_IDMEMBERS.MEMBER_NAME分組。

SELECT MEMBERS.MEMBER_ID, MEMBERS.MEMBER_NAME 
    , COUNT(personal_training_sessions.session_id) 
    FROM MEMBERS 
    JOIN personal_training_sessions 
    ON personal_training_sessions.member_id = members.member_id 
GROUP BY MEMBERS.MEMBER_ID, MEMBERS.MEMBER_NAME 

你想做個人會議成員的算的,所以您可以通過會員信息需要組。

基本的(當然也可以得到很多更復雜)GROUP BY,SELECT查詢:

SELECT <column 1>, <column n> 
    , <aggregate function 1>, <aggregate function n> 
    FROM <table_name> 
GROUP BY <column 1>, <column n> 

聚合函數之中,肯懷特說,像MIN()MAX()COUNT()等。您分組全部未彙總的列。

如果您的MEMBERS表在MEMBER_ID上唯一,但是基於您的查詢,我懷疑它是這樣的。爲了澄清我的意思,如果您的表格在MEMBER_ID上不唯一,那麼您不計算每個MEMBER_ID的會話數量,但每MEMBER_ID的會話數量爲MEMBER_NAME。如果他們處於1:1的關係,那麼它實際上是相同的事情,但如果你可以有多個MEMBER_NAMEMEMBER_ID那麼它不是。

+2

+1。爲了澄清,'GROUP BY'應該包含所有未彙總的列(不是SUM(),AVG(),MIN(),MAX()或其他聚合函數的一部分)。 –

+0

我剛剛添加了一個像@KenWhite這樣的小東西:-)。 – Ben

+0

我明白這一點,但我不確定它是否明確解釋;剛接觸SQL的人可能不知道','表示所有未被聚合的列。 –

1
SELECT MEMBERS.MEMBER_ID, 
     MEMBERS.MEMBER_NAME, 
     COUNT(personal_training_sessions.session_id) 

FROM MEMBERS JOIN personal_training_sessions 
ON personal_training_sessions.member_id=members.member_id 

GROUP BY personal_training_sessions.session_id; 

您使用的COUNT函數,因此,其他列,MEMBER_ID & MEMBER_NAME,必須包含該組由子句。

相關問題