我在试着计算一支球队在他们的会议锦标赛中获胜的次数。下面列出了我正在使用的SQL表的一部分:
Season ConfAbbrev DayNum WTeamID LTeamID
1 2001 a_sun 121 1194 1144
2 2001 a_sun 121 1416 1240
3 2001 a_sun 122 1209 1194
4 2001 a_sun 122 1359 1239
5 2001 a_sun 122 1391 1273
6 2001 a_sun 122 1407 1416
7 2001 a_sun 123 1209 1359
8 2001 a_sun 123 1407 1391
9 2001 a_sun 124 1209 1407
如果我运行以下查询:
SELECT season, confabbrev, wteamid, COUNT(wteamid) AS wins
INTO conf_tourney_wins
FROM mconferencetourneygames
GROUP BY season, confabbrev, wteamid
ORDER BY season, confabbrev;
我可以得到一支球队的胜利次数。问题是,我还希望没有赢得比赛的球队在wins列中列出0。我想我需要使用CASE语句,但还没能让它起作用。我试着使用类似这样的东西:
WHEN lteamid NOT IN wteamid THEN 0
但这并不管用。任何帮助都将不胜感激。
发布于 2020-06-09 00:15:58
如果有一个适用于团队的表格,戈登·林诺夫的答案是true.but,如果没有,你可以这样写:
select grp.season, grp.confabbrev, grp.TeamID,count(g.wteamID)
from
(SELECT season, confabbrev, wteamid as teamID
FROM mconferencetourneygames
GROUP BY season, confabbrev, wteamid
union
SELECT season, confabbrev, Lteamid as TeamID
FROM mconferencetourneygames
GROUP BY season, confabbrev, Lteamid
) grp
left outer join mconferencetourneygames m
on(g.season = grp.season and g.confabbrev = grp.confabbrev and g.wteamid =
grp.teamid)
GROUP BY grp.season, grp.confabbrev, grp.TeamID
ORDER BY grp.season, grp.confabbrev;
发布于 2020-06-08 23:41:26
您需要从所有团队的列表开始。让我假设你在一个表中有这个。然后。。。left join
。因此,这似乎做了您想要的--包括那些没有获胜的团队使用0
的所有团队:
SELECT ctw.season, ctw.confabbrev, t.wteamid, COUNT(c.teamid) AS wins
INTO conf_tourney_wins
FROM teams t LEFT JOIN
mconferencetourneygames ctg
ON ctg.wteamid = t.teamid
GROUP BY ctw.season, ctw.confabbrev, t.wteamid
ORDER BY season, confabbrev;
https://stackoverflow.com/questions/62265798
复制相似问题