繁体   English   中英

MySQL 统计字段值与连接数据的出现次数

[英]MySQL count number of occurrences of field value with join data

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

我一直在尝试通过连接来做到这一点,但出于某种原因,我正在为每个场地重新计算 1。

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

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

我环顾了各种SO帖子,但找不到任何能够提供帮助的东西。 我真的是这样的 SQL 初学者。

谢谢

您缺少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
  • 您可以在events表上进行group by ,获取结果并将此获得的结果与venues表进行内部连接。 这也可以提高内连接的性能,因为它必须映射更少的行。

查询语句:

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

您还可以使用 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 子句返回的结果。

so > 0返回计数 > 0 的重复值

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM