用于从不同表中获取信息的SQL查询
需要有关sql查询的帮助。 我有两张桌子 火柴用于从不同表中获取信息的SQL查询,sql,sql-server,Sql,Sql Server,需要有关sql查询的帮助。 我有两张桌子 火柴 first_referee_arbitr_id second_referee_arbitr_id home_team guest_team date 仲裁人 id name surname 第一仲裁人仲裁人id和第二仲裁人仲裁人id来自仲裁人表(id) 因此,我需要计算每名裁判参加比赛的次数: referee_first_count | referee_second_coun
first_referee_arbitr_id
second_referee_arbitr_id
home_team
guest_team
date
仲裁人
id
name
surname
第一仲裁人仲裁人id
和第二仲裁人仲裁人id
来自仲裁人表(id)
因此,我需要计算每名裁判参加比赛的次数:
referee_first_count | referee_second_count | Arbitr Surname | Arbitr Name
我现在的问题是:
SELECT T1.referee_first_count, T2.referee_second_count, T1.surname, T1.name
FROM (
select matches.first_referee_arbitr_id, q.surname, q.name, count(*) AS referee_first_count
FROM matches
JOIN (
SELECT name, surname, id
FROM arbitrs
) as q ON matches.first_referee_arbitr_id=q.id
GROUP BY matches.first_referee_arbitr_id, q.name, q.surname
ORDER BY referee_first_count DESC
) T1 FULL OUTER JOIN
(
select matches.second_referee_arbitr_id, arbitr.surname, arbitr.name, count(*) AS referee_second_count
FROM matches
JOIN (
SELECT name, surname, id
FROM arbitrs
) as arbitr ON matches.second_referee_arbitr_id=arbitr.id
GROUP BY matches.second_referee_arbitr_id, arbitr.name, arbitr.surname
ORDER BY referee_second_count DESC
) T2
ON (
(T1.name = T2.name) AND (T1.surname = T2.surname)
)
示例
仲裁人:
id | Name | Surname
1 John Rambler
2 Steve Crystler
3 Tom Ferguson
匹配项:
first_referee_arbitr_id| second_referee_arbitr_id| home_team | guest_team | date
1 Chelsea Everton 22.06.2020
2 1 Liverpool Lester 28.06.2020
3 Dinamo K Dinamo M 06.07.2020
1 2 Juventus Dinamo K 10.10.2020
3 Dinamo K Chelsea 20.20.2020
结果:
referee_first_count | referee_second_count | surname | name
2 1 Rambler John
1 1 Crystler Steve
2 0 Ferguson Tom
我现在使用上面的查询得到的结果:
referee_first_count | referee_second_count | surname | name
2 1 Rambler John
1 1 Crystler Steve
2 NULL NULL NULL
首先聚合
匹配项
表(两次),然后将其左键连接到仲裁人
表:
SELECT a.name , a.Surname , ISNULL(fir.first_count,0) , ISNULL( sec.sec_count,0)
FROM Arbitrs a
LEFT JOIN (
SELECT first_referee_arbitr_id,COUNT(*) as first_count
FROM Matches
GROUP BY first_referee_arbitr_id
) fir
ON fir.first_referee_arbitr_id = a.id
LEFT JOIN (
SELECT second_referee_arbitr_id,COUNT(*) as sec_count
FROM Matches
GROUP BY second_referee_arbitr_id
) sec
ON sec.second_referee_arbitr_id = a.id
这就是你得到的结果吗?否则你的查询结果是什么?@asi我需要得到这个结果,现在我用这个得到另一个结果query@asi我现在添加了我的结果,这对我很有帮助。谢谢,我忘了提一下,最好得到每行的总和,然后将结果添加到总计列中
SELECT a.name , a.Surname , ISNULL(fir.first_count,0) , ISNULL( sec.sec_count,0)
FROM Arbitrs a
LEFT JOIN (
SELECT first_referee_arbitr_id,COUNT(*) as first_count
FROM Matches
GROUP BY first_referee_arbitr_id
) fir
ON fir.first_referee_arbitr_id = a.id
LEFT JOIN (
SELECT second_referee_arbitr_id,COUNT(*) as sec_count
FROM Matches
GROUP BY second_referee_arbitr_id
) sec
ON sec.second_referee_arbitr_id = a.id