当前位置: 首页 > 知识库问答 >
问题:

SQL优化-匹配分析对匹配对进行排序

羊浩广
2023-03-14

场景:匹配算法已识别ID1,ID2已匹配。我需要对匹配做进一步的分析。为此,我需要减少输出中的行数并正确排序。

这个输入只是样本和子集。拥有数千条实际记录使这项任务变得困难。

输入:

预期产出:

我需要确保输出应该有ID,应该有ID1和ID2组合的不同记录,这仍然很好,因为我可以进行distinct和union。

棘手的部分是确保输出中的数据排序。我需要将相似的行按顺序排列。

示例:

111,222,333,444,555,021,023在ID1和ID2中有相似的匹配ID,并且必须一起排序。在这个群体中,排序顺序并不重要,只是他们需要在一起。同样,可能有许多这样的团体。

其余的只要有1对,只需将它们排序在一起,如013014和010011等

有人能帮我解决这个问题吗?

共有1个答案

庄经国
2023-03-14

对于事先知道模式的情况,union按情况排序,此时将转到以下位置:

select * from (
select ID1, NAME1 from tab1 union
select ID2, NAME2 from tab1 ) a
order by case when NAME1 like '%S' then '' else NAME1 end;

SQL在这里篡改您的数据

仅基于ID1进行分组

select * from (
  select concat(least(ID1, ID2), greatest(ID1,ID2)) sorter, ID1, NAME1 from tab1 union
  select concat(least(ID1, ID2), greatest(ID1,ID2)) sorter, ID2, NAME2 from tab1 ) a
 group by ID1
 order by sorter

或在SQL Server上使用的情况下:

select min(sorter) sorter, ID1, NAME1 from (
  select concat(case when ID1<ID2 then ID1 else ID2 end, case when ID1>ID2 then ID1 else ID2 end) sorter, ID1, NAME1 from tab1 union
  select concat(case when ID1<ID2 then ID1 else ID2 end, case when ID1>ID2 then ID1 else ID2 end) sorter, ID2, NAME2 from tab1 ) a
 group by ID1, Name1
 order by min(sorter)
 类似资料:
  • 问题内容: 我有这个查询: 是否可以根据首先匹配的条件对从该查询返回的记录进行排序。我想先获取所有匹配的记录,然后再获取其他匹配的记录。 例如,如果我有以下记录: 我希望对它们进行如下排序: 有可能吗? 问题答案:

  • 问题内容: 我在用SQL开发匹配算法时遇到了麻烦。我有一张桌子。这些中的每一个都需要与表中的相同行数匹配(出于这个问题的原因,我们需要为每个主题选择两行或控件)。所选控件的位置必须完全匹配,并且所选控件的值应尽可能接近主题。 以下是一些示例数据: 表主题: 表控件: 这是来自样本数据的最佳结果: 这很棘手,因为例如控件11与主体1最接近。但是,在最佳解中,控件11与主体3匹配。 我相信匈牙利算法已

  • 问题内容: 我对使用ngram的单词有部分匹配。如何修改映射以始终偏爱精确匹配而不是ngram令牌?我不想修改查询。一个搜索框将搜索多种类型,每种类型都有各自的字段。 例如,假设我正在搜索职位,一个人的标题为“现场工程师”,另一个人的标题为“引擎技术员”。如果用户搜索“引擎”,我希望ES将后者返回为更相关。 我几乎逐字使用此映射:例外:我使用的ngram的最小值为3,最大值为11,而不是边缘ngr

  • 我刚开始在Golang编程,想对一系列地图进行排序。我有一系列地图。让我们称之为示例_数组。 ] 现在我想使用key的值对这个数组进行排序,所以example_array应该修改为- 如果我使用键的值对原始数组进行排序,原始数组应该修改为- 如何在Golang对这些地图阵列进行排序。请帮忙!

  • 这将是我发布的第一个问题! 我正在尝试使用Intel的SSE4优化立体视觉应用程序的“块匹配”实现。2和/或AVX内部函数。我用“绝对差之和”来寻找最佳匹配块。在我的情况下,blockSize将是一个奇数,例如3或5。这是我的C代码片段: 我知道,数据流单指令多数据扩展指令集包含许多指令,以便于使用SAD进行块匹配,例如mm\u mpsadbw\u epu8和mm\u SAD\u epu8,但它们

  • TL;dr:我如何用pcregrep来拆分每一个多行匹配? 长版本:我有一些文件,有些行以(小写)字符开头,有些以数字或特殊字符开头。如果我至少有两行彼此相邻,以小写字母开头,我希望在我的输出中这样做。但是,我希望每个发现都被分隔/拆分,而不是相互附加。这是正则表达式: 所以,如果我提供这样的文件: 给出的结果是 然而,我想要的是这个: 这可能吗和/或我必须开始使用Python(或类似)?即使建议