mysql - 计算每年的运行事件总数以及跨多年的事件

标签 mysql sql

我有一张跨越数年的事件表。

title     start_year  end_year 
Event 1   1976        1983
Event 2   1977        2002
Event 3   2018        2019
Event 4   2003        2019

期望的结果:

我想输出过去 50 年来每年“运行”事件的总数。 (1976年,只有一项赛事在进行。1977年,同一赛事仍在进行,另外还举办了另一项赛事。)

year   total_events 
1976   1
1977   2
1976   2

示例查询:

此查询返回一年的总计。让它输出过去 50 年的结果的最佳方法是什么?

SELECT COUNT(*) AS total_events
FROM `events`
WHERE start_year <= 1976
AND end_year >= 1976

最佳答案

基本上,您需要一个年份列表。如果您手边没有,您可以在派生表中创建一个列表:

select y.year,
       (select count(*)
        from t
        where y.year between t.start_year and t.end_year
       ) as num_events
from (select 1976 as year union all
      select 1977 as year union all
      select 1978 as year union all
      . . .
     ) y;

关于mysql - 计算每年的运行事件总数以及跨多年的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56800383/

相关文章:

sql - 如何更改表中t时间后的字段数据?

java - 如何将 IF NOT EXISTS 语句用于 ALTER TABLE 语句?

MySQL 更新 .. WHERE IN .. RAND() .. LIMIT

mysql - 玛丽亚数据库 : Remove Specific Link From Column

mysql - 结果在插入期间由多行组成

sql - 在 sql (hive) 中声明变量

c# - 将类添加到列表 C# 时,索引超出数组范围

mysql - 删除 MySQL 中的重复条目

MySQL 5.5 - 选择记录更改的行

mysql - 一个字段与 JOINED 行数的 SUM 计数