【问题标题】:sql "group by" to group rows corresponding to same pairsql“group by”将对应于同一对的行分组
【发布时间】:2013-02-20 21:02:00
【问题描述】:

我有一个包含 2 列的表 - “主要”和“次要”。此外还有其他列。 以下是一组示例行:

id=1, primary=A, secondary=B, .....
id=2, primary=C, secondary=D, .....
....
.......
id=200, primary=B, secondary=A, .....
id=300, primary=J, secondary=D, .....

我需要一个“GROUP BY”查询,它将主要和次要值属于同一对值的所有行分组无论顺序如何。 所以, 组应如下所示:

group=1, nodepair=BA, ....   // (primary=A && secondary=B) OR (primary=B && secondary=A)
group=2, nodepair=JM, ....   // (primary=J && secondary=M) OR (primary=M && secondary=J)

谢谢。

【问题讨论】:

    标签: sql


    【解决方案1】:
    select * from table t1
    inner join table t2
    on t1.primary = t2.secondary 
    and t1.secondary = t2.primary 
    

    然后你会得到结果:

    id=1,primary=A,secondary=B,id=200,primary=B,secondary=A id=200,primary=B,secondary=A,id=1,primary=A,secondary=B

    【讨论】:

      【解决方案2】:

      你在寻找这样的东西吗?

      select least(primary, secondary)
            ,greatest(primary, secondary)
       from yourtable
      group 
         by least(primary, secondary)
           ,greatest(primary, secondary);
      

      无论顺序如何,它都会为每个唯一的 Primary/Secondary 组合提供一组,即 {A,B} 与 {B,A} 相同。

      【讨论】:

      • 这就是我要找的。谢谢罗尼斯。
      猜你喜欢
      • 2021-05-03
      • 2012-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-22
      • 1970-01-01
      • 2021-11-20
      相关资源
      最近更新 更多