不是GROUP BY表达式错误

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)
Run Code Online (Sandbox Code Playgroud)

PERSONAL_TRAINING_SESSIONS

SESSION_ID(VARHCAR), 
MEMBER_ID (NUMBER), 
STAFF_ID(VARCHAR), 
SESSION_DATETIME(DATE)
Run Code Online (Sandbox Code Playgroud)

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

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;
Run Code Online (Sandbox Code Playgroud)

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

Ben*_*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
Run Code Online (Sandbox Code Playgroud)

您需要每个成员的个人会话计数,因此您需要按成员信息进行分组.

基本(当然它可以得到更复杂的)GROUP BY,SELECT查询是:

SELECT <column 1>, <column n>
     , <aggregate function 1>, <aggregate function n>
  FROM <table_name>
 GROUP BY <column 1>, <column n>
Run Code Online (Sandbox Code Playgroud)

正如Ken White所说,聚合函数就像MIN()MAX(),COUNT()等等.您将所有未聚合的列分组.

如果您的MEMBERS表是唯一的MEMBER_ID,但只能根据您怀疑它的查询,这只会按预期工作.为了澄清我的意思,如果您的表不是唯一的,MEMBER_ID那么您不计算每个会话数,MEMBER_ID而是计算每个会话数MEMBER_ID 每个会话数MEMBER_NAME.如果它们处于1:1的关系中,那么它实际上是相同的,但如果你可以有多个MEMBER_NAMEs,MEMBER_ID那么它就不是.

  • +1.为了澄清,`GROUP BY`应该包含所有未聚合的列(不是`SUM()`,`AVG()`,`MIN()`,`MAX()`或其他聚合函数的一部分). (2认同)