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() 関数を使用すると、オラクルはエラーを返します

(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 に答える