【发布时间】:2019-11-26 17:34:26
【问题描述】:
我有两个 SQL 表:
夹具表:
事件表
我想查询表,以便计算某些特定事件。例如,有多少次主队在 25 分钟后 2-0。在这种情况下,它只会是一次(id 1)。
我可以查询灯具的一侧,但不能与另一侧连接。我遇到的另一个问题是在不存在目标时进行查询。例如,如果我想在 25 分钟后查询谁是 0-0,我无法想象如何查询没有信息的伯恩利 vs 南安普顿比赛的事件表?
任何帮助将不胜感激!
【问题讨论】:
我有两个 SQL 表:
夹具表:
事件表
我想查询表,以便计算某些特定事件。例如,有多少次主队在 25 分钟后 2-0。在这种情况下,它只会是一次(id 1)。
我可以查询灯具的一侧,但不能与另一侧连接。我遇到的另一个问题是在不存在目标时进行查询。例如,如果我想在 25 分钟后查询谁是 0-0,我无法想象如何查询没有信息的伯恩利 vs 南安普顿比赛的事件表?
任何帮助将不胜感激!
【问题讨论】:
您可以使用join 和case 表达式带来所需的基本数据:
select e.*,
(case when e.name = f.home then 'home' else 'away' end) as side
from events e join
fixtures f
on f.id = e.id;
那么对于您的查询,我将使用它作为子查询。让灯具符合您的条件:
select id
from (select e.*,
(case when e.name = f.home then 'home' else 'away' end) as side
from events e join
fixtures f
on f.id = e.id
) e
where time <= 25
group by id
having sum( side = 'home' and type = 'Goal' ) = 2 and
sum( side = 'away' and type = 'Goal' ) = 0;
如果您想要计算匹配项,请使用额外的子查询。
【讨论】: