【问题标题】:Sql query: date range and value greater than 10 each yearsql查询:每年的日期范围和值大于10
【发布时间】:2022-01-13 21:28:14
【问题描述】:

我有一个表,其中包含 3 列(公司名称、年份、roc)。我想找出满足以下条件的公司名称。 在 2010 年和 2020 年之间,每年 roc> 10。意味着如果在 2010 年至 2020 年 roc10,它应该只显示公司名称。

【问题讨论】:

    标签: sqlite


    【解决方案1】:

    根据您想要的年份过滤表格,并在 HAVING 子句中为列 roc 聚合条件:

    SELECT companyname 
    FROM tablename
    WHERE years BETWEEN 2010 AND 2020
    GROUP BY companyname
    HAVING MIN(roc) > 10;
    

    【讨论】:

      【解决方案2】:

      好的,我想刚才我遇到了你的问题。这里的主要问题是,这些公司在一个表中重复,这违反了 DB 原则,这显然使您在查询时更加困难。

      所以你能做的最好的事情就是把这个表分成两个 - COMPANY_TABLE 和 COMPANY_ROC

      所以 COMPANY_TABLE 将只有 companyID(PRIMARY KEY) 和 companyName。

      接下来有另一个名为 COMPANY_ROC 的表 - 它将包含 roc 、 years 、 companyID(FOREIGN KEY - PRIMARY KEY of COMPANY_TABLE)。

      CREATE TABLE COMPANY(
         companyID int PRIMARY KEY NOT NULL,
         companyName varchar,
      )
      
      
      CREATE TABLE COMPANY_ROC(
         companyID int,
         roc int,
         years int,
         FOREIGN KEY(companyID) REFERENCES COMPANY(companyID)
      )
      

      所以在查询时,可以使用 INNER JOIN 进行如下查询

      SELECT COMPANY.companyName from COMPANY INNER JOIN COMPANY_ROC WHERE COMPANY_ROC.years>=2010 AND COMPANY_ROC.years<=2020 AND COMPANY_ROC.roc>10 AND COMPANY.companyID = COMPANY_ROC.companyID
      

      也许我的查询可能有一些问题,因为我没有测试它。只需了解我的解释并尝试一下。将表一分为二并拥有主键、外键是便于查询的关键:)

      【讨论】:

      • 只有一张表怎么样 - 它有公司名称和年份的唯一记录。我试图修改您的查询,但仍然没有给出正确的输出。
      • SELECT a.company_name, a.roce from companyfinancial a INNER JOIN companyfinancial b WHERE b.years>=2010 AND b.years=20 AND a.company_name = b .company_name 和 a.years= b.years
      猜你喜欢
      • 2015-12-03
      • 1970-01-01
      • 2016-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-24
      • 2012-01-11
      相关资源
      最近更新 更多