不是GROUP BY表达式错误

时间:2012-12-19 23:08:06

标签: sql oracle group-by

我对数据库比较陌生。我正在使用Oracle,我正在尝试实现此查询,以查找该成员所拥有的个人培训课程的数量。

表格是;

会员

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)

我的查询正在撤回此错误:

  

ORA-00979:不是GROUP BY表达式   00979. 00000 - “不是GROUP BY表达式”   *原因:
  *动作:行错误:1列: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;

有人能指出我正确的方向吗?我环顾四周,是否需要将计数查询分开?

2 个答案:

答案 0 :(得分: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>

正如Ken White所说,正如MIN()MAX()COUNT()之类的东西一样,聚合函数等。你将所有列都归结为聚合

如果您的MEMBERS表在MEMBER_ID上是唯一的,但只根据您的查询我怀疑它是唯一的。为了澄清我的意思,如果您的表格在MEMBER_ID上不是唯一的,那么您不计算每MEMBER_ID个会话的数量,而是每个MEMBER_ID 的会话数量和< / em> per MEMBER_NAME。如果他们处于1:1的关系中,那么它实际上是相同的,但是如果每个MEMBER_NAME可以有多个MEMBER_ID s,那么它就不是。{/ p>

答案 1 :(得分:2)

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&amp; MEMBER_NAME必须包含在group by子句中。