【问题标题】:Query that countes pairs with same values depending on third column根据第三列计算具有相同值的对的查询
【发布时间】:2016-08-25 09:36:58
【问题描述】:

我有三列:Team_CodeIDtimes_together。 我正在尝试计算 ID 有多少次具有相同的“Team_Code”并将 times_together 添加到其中。 换句话说-我正在尝试编写一列的所有对,检查它们在其他原始数据中具有相同值的次数,然后将第三个原始数据添加到其中。

问这个问题的简单方法如下:

值可以出现两次(例如 1110 与 8888 然后 8888 和 1110)。

【问题讨论】:

  • 我仍然无法理解您具体要查找的内容。我看到用户(通过他们的 ID 区分)可以拥有相同的团队代码,并且您想计算与该团队代码相关联的人数。因此,在您的输出中,您显示 ID 2220 与 1110 被点赞一次,8888 与 1110 关联一次,但为什么 2220 与 8888 关联 11 次?如果可以,请向我们展示您如何获得这些 times_together 输出背后的数学原理,我们会更好地了解您在寻找什么。
  • 很难理解为什么2220 - 8888 的输出是11(虽然我怀疑它应该是126)。您所做的第一个添加是5+5,但为什么不适用于1+1(总结为12)?如果没有任何添加5+5,那么我希望您将其添加为5+1(因此输出应为6)(5 时间在同一团队中,代码为4331 时间在同一个团队,代码为111)。
  • 对不起!将在一分钟内编辑。输出应该是 6。那是因为 8888 与 2222 在 Team_Code 433 中出现了 5 次,在 Team_Code 111 中出现了 1 次。

标签: sql sql-server sql-server-2008 select qsqlquery


【解决方案1】:

您可以在team_code 上自行加入表格并对times_together 求和:

SELECT t1.id, t2.id, SUM(t1.times_together)
FROM   mytable t1
JOIN   mytable t2 ON t1.team_code = t2.team_code AND t1.id != t2.id

如果您想确保每对只出现一次,您可以添加一个条件以始终采用左侧较低的 id:

SELECT t1.id, t2.id, SUM(t1.times_together)
FROM   mytable t1
JOIN   mytable t2 ON t1.team_code = t2.team_code AND t1.id < t2.id

【讨论】:

    【解决方案2】:

    我建议使用这种自连接 SQL,它采用所有可能的 ID 对(但仅在第一个小于第二个的情况下),并使用 CASEtimes_together 求和 当人们在同一队比赛时:

    select     t1.id,
               t2.id,
               sum(case when t1.Team_Code = t2.Team_Code 
                    then t1.times_together
                    else 0
               end) times_together
    from       t as t1
    inner join t as t2 
            on t1.id < t2.id
    group by   t1.id, t2.id
    order by   1, 2
    

    示例案例中的输出为:

    |   id |   id | times_together |
    |------|------|----------------|
    | 1028 | 1110 |              0 |
    | 1028 | 2220 |              0 |
    | 1028 | 8888 |              0 |
    | 1110 | 2220 |              1 |
    | 1110 | 8888 |              1 |
    | 2220 | 8888 |              6 |
    

    【讨论】:

      猜你喜欢
      • 2014-06-19
      • 2023-03-08
      • 2018-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-14
      • 1970-01-01
      相关资源
      最近更新 更多