如何在sql查询中获得正确的结果?

时间:2012-08-30 17:00:39

标签: sql oracle

我想要一个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:不是单组组功能)

如何获得正确的结果?

2 个答案:

答案 0 :(得分: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

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

答案 1 :(得分: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 = ?