3

このようなSQLデータがあります

events
id name         capacity
1  Cooking        10
2  Swimming       20
3  Archery        15

registrants
id  name
1   Jimmy
2   Billy
3   Sally

registrant_event
registrant_id  event_id
     1             3
     2             3
     3             2

「イベント」のすべてのフィールドと、そのイベントに現在登録されている人数を示す追加フィールドを選択したいと思います。この場合、アーチェリーの登録者は 2 人、水泳の登録者は 1 人、料理の登録者は 0 人になります。

これは単一のクエリで実現できると思いますが、正しい構文はわかりません。そのデータを取得するためのクエリはどのように作成されますか?

更新: すばらしい回答をありがとうございます。

4

7 に答える 7

10
SELECT e.*, ISNULL(ec.TotalRegistrants, 0) FROM events e LEFT OUTER JOIN
(
   SELECT event_id, Count(registrant_id) AS TotalRegistrants
   FROM registrant_event
   GROUP BY event_id
) ec ON e.id  = ec.event_id
于 2008-10-15T19:11:31.403 に答える
2
SELECT Events.ID, Events.Name, Events.Capacity, 
       ISNULL(COUNT(Registrant_Event.Registrant_ID), 0)
FROM Events
LEFT OUTER JOIN Registrant_Event ON Events.ID = Registrant_Event.Event_ID
GROUP BY Events.ID, Events.Name, Events.Capacity
于 2008-10-15T19:14:48.430 に答える
1
select d.id1, d.name, d.cappacity, count(d.b_id) as number_of_people
from (select eve.id1,eve.name,eve.cappacity,re_eve.b_id
     from eve left join re_eve on eve.id1 = re_eve.b_id) d
group by d.id1, d.name, d.cappacity
于 2011-02-22T06:42:51.127 に答える
0
select e.id, e.name, e.capacity, IsNull(re.eventCount,0) from events e
left join (
 select count(event_id) as eventCount, event_id  from registrant_event group by event_id
 ) re 
on e.id = re.event_id
于 2008-10-15T19:15:10.880 に答える
0

これをOracle 11gでテストしましたが、うまくいくようです

SELECT e.id, e.name, e.capacity, COUNT(re.event_id)
FROM events e
LEFT JOIN registrant_event re
  ON e.id = re.event_id
GROUP BY e.id, e.name, e.capacity
于 2008-10-15T19:32:16.180 に答える
-1
SELECT
  events.*
, COUNT(registrant_event.registrant_id) AS registrantsCount
FROM events
LEFT JOIN registrant_event ON events.id = registrant_event.event_id
GROUP BY events.id
于 2008-10-15T19:15:49.660 に答える
-1
SELECT e.id, count(*) AS NumRegistrants
FROM events e
LEFT JOIN registrant_event re ON re.event_id=e.id
GROUP BY e.id

登録者のいないイベントの場合、これは 0 ではなく 1 を返すことに注意してください。代わりに 0 を表示するには、もう少し複雑にする必要があります。

SELECT *,
    (SELECT COUNT(*) FROM registrant_event WHERE event_id=id) AS NumRegistrants
FROM events
于 2008-10-15T19:15:57.133 に答える