首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不是按表达式错误分组的

不是按表达式错误分组的
EN

Stack Overflow用户
提问于 2012-12-19 23:08:06
回答 2查看 43.8K关注 0票数 5

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

这些表格是;

成员

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
SESSION_ID(VARHCAR), 
MEMBER_ID (NUMBER), 
STAFF_ID(VARCHAR), 
SESSION_DATETIME(DATE)

我的查询正在重述此错误:

ORA- 00979 :不是一组按表达式00979。00000 *行动:行错误:1栏:8

代码语言:javascript
运行
复制
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;

谁能给我指明正确的方向?我已经看过了,我需要分离计数查询吗?

EN

Stack Overflow用户

回答已采纳

发布于 2012-12-19 23:10:46

错误说明了这一切,您没有按MEMBERS.MEMBER_IDMEMBERS.MEMBER_NAME进行分组。

代码语言:javascript
运行
复制
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

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

通过选择查询,基本的(当然可以得到更复杂的)组是:

代码语言:javascript
运行
复制
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,那么就不是。

票数 6
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13962772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档