【问题标题】:what is the sql query for combination什么是组合的sql查询
【发布时间】:2020-08-13 23:02:47
【问题描述】:

我最近有一个 iterview。我被问到一个复杂的 sql 问题。我无法回答。

问:足球比赛有 8 支球队。

案例1:每支球队必须互相比赛,但只能比赛一次。

案例2:每支球队必须与另一支球队比赛两次。

能否告诉我这两种情况的 SQl 查询?

【问题讨论】:

  • 请添加您的表定义以及到目前为止您尝试了什么以及您的代码如何不起作用。

标签: sql join etl teradata


【解决方案1】:

假设您有一个名为teams 的表,其中包含idname 列,您可以自行加入该表。

第 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

【讨论】:

  • 谢谢。我得到了预期的结果。
【解决方案2】:

对于第一个查询,您可以执行以下操作:

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

【讨论】:

  • 感谢您的回复。但我确实对过滤条件(a.id b.id 感到困惑。因为我们对表使用自连接。因此,表之间的所有 id 值都是相同的。那么,该条件如何为我们提供结果?如果我错了,请纠正我。
  • @soulshrestha 第一个解决方案将显示情况下 A 队与 B 队比赛,但不是 B 与 A 队比赛。第二个将同时显示(A-B 和 B-A)。这就是它起作用的原因。
  • 非常感谢您提到的查询,我得到了预期的结果。但是有一个问题,我正在使用我的 SQL 工具,当我使用 count 关键字来获取连接条件的计数时。我无法得到结果。但我可以得到单个表的计数。查询如下:select count(*) from (select t1.name, t2.name from teams t1 inner join teams t2 on t1.id t2.id);我没有得到任何结果。你能帮帮我吗?
  • @soulshrestha 你可以使用COUNT(*),如:select count(*) from team a join team b on a.id &lt; b.id
猜你喜欢
  • 2021-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-04
  • 1970-01-01
相关资源
最近更新 更多