0

我想要一个 sql 查询返回以下数据:

DES_EVENT | DATE_EVENT | INSCRIBED_PARTICIPANTS

我的表格是(其他列被隐藏)

**EVENT**
ID
DES_EVENT
DATE_EVENT

**EVENT_ACCESS**
NAME
EVENT_ID

**PARTICIPANT**
EVENT_ID

注意:表参与者注册参与者注册的每个事件。

我想知道给定用户组织了哪些活动以及注册了多少参与者。

我尝试执行以下查询:

SELECT
e.des_event,
e.date
FROM
event e,
event_access ea
WHERE
ea.name = ?
AND
ea.event_id = e.id

通过此查询,我无法获得参与者的数量。所以我尝试执行以下查询:

SELECT
e.des_event,
e.date
FROM
event e,
event_access ea,
participant p
WHERE
ea.name = ?
AND
ea.event_id = e.id
AND 
p.event_id = ea.event_id

并且每个事件的行都会为每个参加此事件的参与者重复,但我想在 sql 结果的另一列中获得这些重复次数,就像我放在问题的顶部一样。

如果我使用 count() 函数,oracle 会返回错误

(ORA-00937: 不是单组群功能)

我怎样才能得到正确的结果?

4

2 回答 2

1

如果我理解你,你想要

SELECT e.des_event,
       e.date,
       count(*) num_participants
  FROM event e,
       event_access ea,
       participant p
 WHERE ea.name = ?
   AND ea.event_id = e.id
   AND p.event_id = ea.event_id
 GROUP BY e.ddes_event, e.date

如果这不是您想要的,您可以发布一些示例数据并发布您正在寻找的结果吗?像你一样描述结果很好,但一些具体的测试用例可能有助于澄清事情。

于 2012-08-30T17:05:06.903 回答
1

听起来你想要这个:

select e.des_event,
  e.date_event,
  p.NumberOfParticipants
from event e
inner join event_access ea
  on e.id = ea.event_id
inner join
(
  select count(*) NumberOfParticipants, event_id
  from participant
  group by event_id
) p
  on ea.event_id = p.event_id
where ea.name = ?
于 2012-08-30T17:05:41.457 回答