【问题标题】:SQL: select rows which are unique on specific columnsSQL:选择特定列上唯一的行
【发布时间】:2017-09-21 06:47:00
【问题描述】:

我有一个问题表与

的方案配对
id1     question1    id2    question2
1123    q1           2      q2
1123    q1           3      q3
1123    q1           1231   q142
2431    q12          1231   q142

(ids不是增量的,可以认为是随机的)

我想选择 id1 和 id2 中唯一的元组,例如对于上面的示例,所需的输出可能是:

id1     question1    id2    question2
1123    q1           2      q2
2431    q12          1231   q142

提前谢谢你。

【问题讨论】:

  • SO 不是免费的编码服务。您必须自己尝试解决问题。如果您无法使其正常工作,请发布您尝试过的内容,我们将帮助您修复它。使用GROUP BY 按这些列对数据进行分组,使用COUNT(*) 计算组中有多少行。当计数为1 时,它是唯一的。
  • 您想要的输出与描述不符。为什么输出中没有id1=1123, id2=3?这也是一个独特的组合。
  • 因为当前出现了id1=1123。问题是我不知道如何分别对两列使用“distinct”。
  • GROUP BY id1, id2
  • 您的示例中是否缺少某些数据?您的所有行在id1id2 中都是唯一的。

标签: mysql sql


【解决方案1】:

使用嵌套查询。

SELECT *
FROM (SELECT *
      FROM yourTable
      GROUP BY id1) AS x
GROUP BY id2

但是,无法预测这将如何进行分组。如果子查询选择

id1     id2
1123    1231
2431    1231

那么最终的结果将是:

id1     id2
1123    1231

id1     id2
2431    1231

我不确定如何更改它,以便它产生具有最可能组合的结果。

【讨论】:

    【解决方案2】:

    你也可以使用排名

    SELECT id1,
           question1,
           id2,
           question2
      FROM (SELECT CASE id1 
                        WHEN @curType 
                        THEN @curRow := @curRow + 1 
                        ELSE @curRow := 1 AND @curType := id1 
                    END rank,
                    id1,
                    question1,
                    id2,
                    question2
               FROM q,
                    (SELECT @curRow := 0, @curType := '') r
              ORDER BY  id1, id2
            ) t
     WHERE rank = 1
    

    结果

    rank id1  id2
    1    1123 2
    1    2431 1231
    

    【讨论】:

      猜你喜欢
      • 2016-10-12
      • 2021-07-03
      • 1970-01-01
      • 1970-01-01
      • 2022-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-06
      相关资源
      最近更新 更多