Как мне извлечь счетчик SQL из следующей схемы? - PullRequest
1 голос
/ 24 марта 2012

Предположим, у меня есть таблица СОВЕЩАНИЯ, как показано ниже

M_DATE
M_RACE_NO
M_VENUE
M_ATHLETE

Первичный ключ - дата, номер гонки, место проведения, спортсмен.Каждая дата / раса / место проведения может содержать несколько возможных спортсменов.Предположим, что для конкретного спортсмена я хочу указать дату, номер гонки, место проведения, а также общее количество спортсменов, соревнующихся в эту конкретную дату / номер гонки / место проведения

Например, предположим, что Болт спортсмена участвовал в двух соревнованиях с полями общего числа:7 и 9 Я хотел бы что-то вроде следующего

2011-10-03, 4, NY, 7
2010-24-02, 5, SY, 9

Я знаю, что это будет выглядеть примерно так:

SELECT M_DATE, M_RACE_NO, M_VENUE, SUM(...) FROM MEETING WHERE M_ATHLETE='Bolt'

Я не уверен, что будет после SUM

Ответы [ 2 ]

3 голосов
/ 24 марта 2012
SELECT 
    m.m_date
  , m.m_race_no
  , m.m_venue
  , COUNT(*) AS cnt 
FROM 
        meeting AS m
    JOIN
        meeting AS m2
            ON  m2.m_date    = m.m_date
            AND m2.m_race_no = m.m_race_no
            AND m2.m_venue   = m.m_venue
WHERE 
    m.m_athlete = 'Bolt'
GROUP BY
    m.m_date
  , m.m_race_no
  , m.m_venue
3 голосов
/ 24 марта 2012

, если ваша СУБД поддерживает это:

SELECT M_DATE, M_RACE_NO, M_VENUE,
   COUNT(*) OVER (PARTITION BY M_DATE, M_RACE_NO, M_VENUE)
FROM MEETING
WHERE M_ATHLETE='Bolt'

если нет:

select m1.m_date, m1.m_race_no, m1.m_venue, m2.count_races
from meeting m1
join (select m_date, m_race_no, m_venue, count(*) count_races
      from meeting group by m_date, m_race_no, m_venue) m2
  on m1.m_date = m2.m_date
  and m1.m_race_no = m2.m_race_no
  and m1.m_venue = m2.m_venue
where m1.m_athlete = 'Bolt'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...