我对数据库比较陌生。我正在使用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 :不是一组按表达式00979。00000 *行动:行错误: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;谁能给我指明正确的方向?我已经看过了,我需要分离计数查询吗?
发布于 2012-12-19 23:10:46
错误说明了这一切,您没有按MEMBERS.MEMBER_ID和MEMBERS.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您需要每个成员的个人会话计数,因此需要按成员信息分组。
通过选择查询,基本的(当然可以得到更复杂的)组是:
SELECT <column 1>, <column n>
, <aggregate function 1>, <aggregate function n>
FROM <table_name>
GROUP BY <column 1>, <column n>一个聚合函数,如Ken所说,类似于MIN()、MAX()、COUNT()等。您可以按所有未聚合的列进行分组。
只有当您的MEMBERS表在MEMBER_ID上是唯一的,但根据您的查询我怀疑它是唯一的,这才能正常工作。为了澄清我的意思,如果您的表在MEMBER_ID上不是唯一的,那么您不是在计算每个MEMBER_ID的会话数,而是每个MEMBER_ID和每个MEMBER_NAME的会话数。如果他们处于1:1的关系中,那么这实际上是一回事,但是如果每个MEMBER_ID可以有多个MEMBER_ID,那么就不是。
https://stackoverflow.com/questions/13962772
复制相似问题