MySQL使用连接数据计算字段值的出现次数

时间:2019-03-06 17:44:03

标签: mysql join count

我的数据库中有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

我想要的结果是

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

我一直在尝试通过join来做到这一点,但是由于某种原因,我在每个场所都得到了1。

这就是我的SQL刚刚的样子。

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

我浏览了SO上的各种帖子,但找不到任何可以帮助的内容。我真的是这样的SQL初学者。

谢谢

3 个答案:

答案 0 :(得分:1)

您缺少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

答案 1 :(得分:0)

  • 您可以在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

答案 2 :(得分:0)

您还可以使用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的重复值