我的数据库中有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初学者。
谢谢
答案 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的重复值