mem*_*one 5 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;
谁能指出我正确的方向?我环顾四周,是否需要将计数查询分开?
错误说,这一切,你不分组的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
您需要每个成员的个人会话计数,因此您需要按成员信息进行分组.
基本(当然它可以得到更复杂的)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 和每个会话数MEMBER_NAME.如果它们处于1:1的关系中,那么它实际上是相同的,但如果你可以有多个MEMBER_NAMEs,MEMBER_ID那么它就不是.
| 归档时间: | 
 | 
| 查看次数: | 38649 次 | 
| 最近记录: |