当前位置: 首页 > 面试题库 >

SQL和唯一的N列组合

衡翰藻
2023-03-14
问题内容

在Oracle上是否有一种简单的方法来查询n个字段的唯一组合。我有一个非常简单的两场解决方案:

CREATE TABLE combinations AS
SELECT 1 AS n 
  FROM DUAL
UNION ALL
SELECT 2
  FROM DUAL;

查询唯一组合:

SELECT LEAST(x.a, x.b), 
       GREATEST(x.a,x.b) 
  FROM (SELECT c1.n a, 
               c2.n b 
          FROM combinations c1
    CROSS JOIN combinations c2
         WHERE c1.n <> c2.n) x
GROUP BY LEAST(x.a, x.b), GREATEST(x.a,x.b);

通过此查询,可以认为1,2和2,1相同。不幸的是,它不适用于三字段结构(例如,必须将1,2,3视为与3,1,2相同,因为值的顺序无关紧要)。Oracle分析功能是否为该问题提供适当的解决方案?您能建议一些特定的Oracle分析功能吗?


问题答案:

您对2列的查询可以这样重写:

SELECT
  c1.n,
  c2.n
FROM combinations c1
  INNER JOIN combinations c2 ON c1.n < c2.n

然后,对于3列,您需要添加一些内容(以粗体突出显示):

SELECT
  c1.n,
  c2.n **,
  c3.n**
FROM combinations c1
  INNER JOIN combinations c2 ON c1.n < c2.n
  **INNER JOIN combinations c3 ON c2.n < c3.n**

我敢肯定,您现在可以轻松地猜测如何针对更多列进行缩放。



 类似资料:
  • 问题内容: 我不确定这是否可行,但我想计算表中唯一值的数量。我知道要计算我执行的唯一FolderID的数量: 但是我想对文件夹表中的文件夹标识和用户标识的唯一组合数进行计数。有没有办法做到这一点? 问题答案:

  • 我有下表: 我希望KEY_1和KEY_2的组合是唯一的,反之亦然。 这样,我可以使KEY_1和KEY_2之间的组合唯一,但我也希望相反。 示例: 我无法再次插入此值,反之亦然。 这应该是无效的(因为它是同一对密钥): 谢啦

  • 问题内容: 我花了点时间弄清楚我需要的SQL查询。 我有一个项目,该项目具有用户的工作室级别的用户角色,并且每个项目都有覆盖/覆盖工作室级别的角色的项目级别的角色。所有角色都是在工作室级别定义的,但是只有一些角色是在项目级别定义的(主要是与相应的工作室级别角色具有不同值的角色) g_studio_UsersInRole g_project_UsersInRole 我需要一个查询,该查询将给定项目I

  • 问题内容: 是否可以合并并在SQL Server查询中使用? 所以,这个查询 查找以下任何可能的匹配项: 等等… 问题答案: 实际上,IN语句创建了一系列OR语句…因此 是有效的 不幸的是,这就是您必须在LIKE语句中采用的方法

  • 问题内容: 我有一个2D Numpy数组,包含从0到n的值。我想要一个长度为n的列表,以使该列表的第i个元素是值i + 1(不包括0)的所有索引的数组。 例如,对于输入 我期望得到 我发现了一个相关的问题: 在numpy数组中获取重复元素的所有索引的列表, 这可能会有所帮助,但我希望找到一个更直接的解决方案,该方法不需要展平和排序数组,并且尽可能高效。 问题答案: 这是一种矢量化方法,适用于任意数

  • 问题内容: 我一直在尝试找出是否有可能对两列的组合具有唯一约束。 具体来说,我有两列A和B。 我有下面这样的行 然后我希望以下组合在插入时失败 我尝试添加一个简单的约束 但这让我在已经存在时插入。 这可能吗?还是在插入之前必须检查组合是否存在? 问题答案: 您可以使用表达式的索引来执行此操作: 我不认为约束允许表达式(并且现在没有方便的Postgres进行测试),但这本质上是同一回事。