【问题标题】:SQL Distinct pairs matched on array of strings在字符串数组上匹配的 SQL 不同对
【发布时间】:2021-09-30 19:25:11
【问题描述】:

这是表格的简化版本,但我有一个名为 NAME 的表格,其中包含 2 列、名称(字符串)和类(字符串)

index name classes
0 Joe Mat 12
1 Hector Mat 12
2 Terry Arc 13
3 Elizabeth Soc 7
4 Wyatt Arc 13
5 Alex His 9
6 James Mat 12
7 Rebecca Soc 7

注意:所有名称和类实际上都有一个与之关联的数字 ID,使用实际名称进行说明。

我想将参加同一班级的独特人配对,输出表看起来像这样。

name1 name2 class
Joe Hector Mat 12
Joe James Mat 12
Hector James Mat 12
Terry Wyatt Arc 12

值得注意的是,输出表应该有唯一的配对,并且一个人不应该与自己配对(所以不要想要这样的结果)

name1 name2 class
Joe Hector Mat 12
Hector Joe Mat 12
Joe Joe Mat 12

我尝试过类似

SELECT NAME.names as name1, NAME.names as name2, NAME.classes as c1, COUNT(*) as pa
FROM NAME 
JOIN NAME 
    ON name1.c1 = name2.c1
       GROUP BY name1, name2
       ORDER BY c1

但不起作用。

【问题讨论】:

    标签: sql


    【解决方案1】:

    您可以使用基于索引/名称的连接和比较来实现此目的

    查询 #1

    SELECT
         n1.name as name1,
         n2.name as name2,
         n1.classes
    FROM
         NAME n1
    INNER JOIN
         NAME n2 ON n1.classes=n2.classes AND n1.index < n2.index;
    
    name1 classes name2
    Joe Mat 12 Hector
    Terry Arc 13 Wyatt
    Joe Mat 12 James
    Hector Mat 12 James
    Elizabeth Soc 7 Rebecca

    查询 #2

    SELECT
         n1.name as name1,
         n2.name as name2,
         n1.classes
    FROM
         NAME n1
    INNER JOIN
         NAME n2 ON n1.classes=n2.classes AND n1.name < n2.name;
    
    name1 classes name2
    Hector Mat 12 Joe
    James Mat 12 Joe
    Terry Arc 13 Wyatt
    Hector Mat 12 James
    Elizabeth Soc 7 Rebecca

    View on DB Fiddle

    让我知道这是否适合你。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多