【发布时间】:2020-08-13 23:02:47
【问题描述】:
我最近有一个 iterview。我被问到一个复杂的 sql 问题。我无法回答。
问:足球比赛有 8 支球队。
案例1:每支球队必须互相比赛,但只能比赛一次。
案例2:每支球队必须与另一支球队比赛两次。
能否告诉我这两种情况的 SQl 查询?
【问题讨论】:
-
请添加您的表定义以及到目前为止您尝试了什么以及您的代码如何不起作用。
我最近有一个 iterview。我被问到一个复杂的 sql 问题。我无法回答。
问:足球比赛有 8 支球队。
案例1:每支球队必须互相比赛,但只能比赛一次。
案例2:每支球队必须与另一支球队比赛两次。
能否告诉我这两种情况的 SQl 查询?
【问题讨论】:
假设您有一个名为teams 的表,其中包含id 和name 列,您可以自行加入该表。
第 2 季度是关于生成所有球队组合 - 除了球队不能与自己比赛:
select t1.name, t2.name
from teams t1
inner join teams t2 on t1.id <> t2.id
对于 Q1,您可以使用不等式条件,以便每个元组只出现一次:
select t1.name, t2.name
from teams t1
inner join teams t2 on t1.id < t2.id
【讨论】:
对于第一个查询,您可以执行以下操作:
select a.*, b.*
from team a
join team b on a.id < b.id
对于第二个,你可以这样做:
select a.*, b.*
from team a
join team b on a.id <> b.id
【讨论】:
COUNT(*),如:select count(*) from team a join team b on a.id < b.id。