MySQL подсчитывает количество появлений значения поля с данными соединения - PullRequest
2 голосов
/ 06 марта 2019

У меня есть 2 таблицы в моей базе данных, см. Ниже:

Таблица событий

title | venue_id
event 1 | 1
event 2 | 1
event 3 | 1
event 4 | 1
event 5 | 2
event 6 | 2
event 7 | 2
event 8 | 2
event 9 | 3
event 10 | 3

Таблица мест

id | title
1  | Venue 1
2  | Venue 2
3  | Venue 3

Нужные результаты, которые я ищу, будутbe

venue_title | event_count
Venue 1     | 4
Venue 2     | 4
Venue 3     | 2

Я пытался сделать это с помощью объединений, но по какой-то причине я получаю счет 1 для каждого места.

Так выглядит мой SQL только сейчас.

SELECT
  count(DISTINCT events.venue_id),
  venues.title,
FROM
  events
INNER JOIN
  venues
  ON venues.id = events.venue_id

Я просматривал различные сообщения SO, но не смог найти ничего, что могло бы помочь.Я действительно новичок в SQL, как это.

Спасибо

Ответы [ 3 ]

1 голос
/ 06 марта 2019

Вы пропустили предложение group by:

SELECT
  count(DISTINCT events.venue_id),
  venues.title,
FROM
  events
INNER JOIN
  venues
  ON venues.id = events.venue_id
GROUP BY -- Here!
  venues.id, venutes.title
0 голосов
/ 07 марта 2019

вы также можете использовать предложения GROUP BY и HAVING

SELECT
      count(events.venue_id),venues.title,
    FROM events
    INNER JOIN venues
      ON venues.id = events.venue_id group by events.venue_id having count(events.venue_id) > 0

Предложение GROUP BY используется для группировки строк с одинаковыми значениями, а предложение HAVING используется для ограничения результатов, возвращаемых предложением GROUP BY.

, поэтому > 0 возвращает повторяющиеся значения, имеющие количество> 0

0 голосов
/ 06 марта 2019
  • Вы можете сделать group by для таблицы events, получить результаты и выполнить внутреннее соединение этого полученного результата с таблицей venues. Это также может улучшить производительность внутреннего соединения, поскольку ему придется отображать меньшее количество строк.

SQL:

select v.title,derived.event_count
from venues v
inner join (select venue_id,count(venue_id) as event_count
from events 
group by venue_id) derived
on v.id = derived.venue_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...