Sql 计算id在两列中出现的次数
我有一个Sql 计算id在两列中出现的次数,sql,postgresql,Sql,Postgresql,我有一个匹配和一个团队表格。这是一个例子。我在用Postgres 它们看起来像这样: matches table id_match | id_home | id_away | date_time ----------+---------+---------+--------------------- 1 | 1 | 2 | 2018-11-03 16:30:00 2 | 1 | 3 | 2019-11-
匹配
和一个团队
表格。这是一个例子。我在用Postgres
它们看起来像这样:
matches table
id_match | id_home | id_away | date_time
----------+---------+---------+---------------------
1 | 1 | 2 | 2018-11-03 16:30:00
2 | 1 | 3 | 2019-11-03 16:30:00
3 | 2 | 3 | 2019-11-03 16:30:00
4 | 3 | 1 | 2020-11-03 16:30:00
teams table
id_team | club | shorthand
---------+----------------+-----------
1 | Vinica | VIN
2 | Kolpa | KOL
3 | Crnomelj | CRN
4 | Klub Študentov | KBŠ
5 | Zilje | ZLJ
6 | Preloka | PRK
我正在尝试查询并加入这两个,以获得:
team name | total number of matches
----------+--------------------------
Vinica | 3
Kolpa | 2
Crnomelj | 3
我发现最困难的一点是,
team id
可以出现在matches表的两列中。您可以使用横向联接来取消数据绑定。然后加入并聚合:
select t.club, count(*)
from matches m cross join lateral
(values (m.id_home), (m.id_away)
) v(id_team) join
teams t
on t.id_team = v.id_team
group by t.club;
是小提琴。谢谢!真聪明!当它允许我回答时,我会接受。