【发布时间】:2022-01-13 21:28:14
【问题描述】:
我有一个表,其中包含 3 列(公司名称、年份、roc)。我想找出满足以下条件的公司名称。 在 2010 年和 2020 年之间,每年 roc> 10。意味着如果在 2010 年至 2020 年 roc10,它应该只显示公司名称。
【问题讨论】:
标签: sqlite
我有一个表,其中包含 3 列(公司名称、年份、roc)。我想找出满足以下条件的公司名称。 在 2010 年和 2020 年之间,每年 roc> 10。意味着如果在 2010 年至 2020 年 roc10,它应该只显示公司名称。
【问题讨论】:
标签: sqlite
根据您想要的年份过滤表格,并在 HAVING 子句中为列 roc 聚合条件:
SELECT companyname
FROM tablename
WHERE years BETWEEN 2010 AND 2020
GROUP BY companyname
HAVING MIN(roc) > 10;
【讨论】:
好的,我想刚才我遇到了你的问题。这里的主要问题是,这些公司在一个表中重复,这违反了 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
也许我的查询可能有一些问题,因为我没有测试它。只需了解我的解释并尝试一下。将表一分为二并拥有主键、外键是便于查询的关键:)
【讨论】: