【问题标题】:Element repeated at least 3 times元素重复至少 3 次
【发布时间】:2015-12-09 23:49:25
【问题描述】:

有没有办法在不使用 Count 和 Group By 的情况下判断一个元素是否在一列中至少出现 3 次?

编辑:答案预计在 SQL(mysql 或 oracle11g)中,其中 仅使用 SELECT、FROM、WHERE 和 JOINS。当然,所有的逻辑运算符和量词都是 RELATIONAL CALCULUS WITH TUPLES 根本没有工具。

元组示例:

{ t : {名称} | ∃ s : {姓名, 工资} ( Employee(s) ∧ s.wage = 50.000 ∧ t.name = s.name ) }

这里,元组关系演算的局限性很明显。

没有 CTE、没有分组依据、没有行工具、没有不同、没有计数、没有视图、没有创建、没有插入、没有改变。没有那些很棒的 SQL 工具。

我不想使用 Count 和 Group By 的原因是因为我将把它带到 Relational Calculus with Tuples,它不允许使用这些工具。

举个例子:

假设有一个表 ORDER (Id_article, Id_Provider),其中两个 ID 都是外键。

查询:获取所有至少订购3次的文章。

让表 ORDER 为:

   Id_Article      Id_Provider

       1               A
       1               B
       1               B
       2               C
       2               C
       3               A

查询的结果应该只有元素1,因为在Id_Article中是3次。

【问题讨论】:

  • 什么是Relational Calculus?以及为什么要标记mysqloracle11?选择一个。
  • 因为我可以使用这两个选项中的任何一个。
  • 关系微积分是 sw 还是 db?因为可能 oracle 有其他你不能使用的工具:(
  • 如果您在记录上有一个唯一键,您可以使用两个 EXIST 子句来检查是否存在具有相同 Id_Article 的另外两个记录。
  • 是的,我就是这么想的。不幸的是,这是我正在使用的模型提出的方式。只是带有其他非唯一列的外键,为了简单起见,我忽略了这些列。

标签: mysql sql database oracle11g


【解决方案1】:

不知道这是否回答了您的问题。但是oracle有一个row_number函数

在这种情况下partition_by 重新开始计数。

SQL Fiddle Demo

WITH CTE AS (
  SELECT    "Id_Article", 
            "Id_Provider", 
            ROW_NUMBER() OVER 
            (PARTITION BY "Id_Article" ORDER BY "Id_Provider")  AS rn
      FROM  Table1
)     
SELECT DISTINCT "Id_Article"
FROM CTE
WHERE rn >= 3;

【讨论】:

  • 很抱歉浪费了您的时间。我不清楚元组的关系演算是什么,所以我对这个问题进行了编辑。
  • 别担心。但也许你的问题更多的是mathematic溢出而不是编程。他们在那里做疯狂的事情。
  • 我认为你是对的。我不知道这个 Stackoverflow for Math,所以我会在那里提出问题。谢谢。
【解决方案2】:

可能的解决方案:

让我们拨打以下Ids

SELECT O1.id_article AS id FROM ORDER O1 JOIN ORDER O2 ON O1.id_article = O2.id_article MINUS SELECT O3.id_article AS id FROM ORDER O3 MINUS SELECT O3.id_article AS id FROM ORDER O3 MINUS SELECT O3.id_article AS id FROM ORDER O3 MINUS SELECT O3.id_article AS id FROM ORDER O3

那么我们的关系方程是{ t : {id} | ∃ s : {id} ( Ids(s) ∧ t.id = s.id ) }

如果你不能使用MINUS,那么也许这可以帮助Converting aggregate operators from SQL to relational algebra

【讨论】:

    猜你喜欢
    • 2020-08-28
    • 2011-04-14
    • 2019-05-23
    • 1970-01-01
    • 2016-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多