繁体   English   中英

SQL-查询加入3个表,按特定列分组并按年份过滤?

[英]SQL- Query Join 3 Tables, Group by a certain column and filter by Year?

问题:

按 state 细分的 2019 年收购的物业在 2020 年的总分配是多少?

到目前为止,这就是我所拥有的,似乎我没有得到正确的总结? 我错过了什么步骤。 我没有收到错误但也没有得到答案? 有任何想法吗?

CREATE TABLE Property
(
    hmy INT   NOT NULL,
    scode VARCHAR   NOT NULL,
    saddr1 VARCHAR NOT NULL,
    saddr2 VARCHAR NOT NULL,
    scity VARCHAR NOT NULL,
    sstate VARCHAR NOT NULL,
    szipcode INT NOT NULL,
    PRIMARY KEY (hmy) 
);

CREATE TABLE PropInfo
(
    hmy INT   NOT NULL,
    hcode INT   NOT NULL,
    acquisitiondate DATE   NOT NULL,
    unitcount INT   NOT NULL,
    yearbuilt INT   NOT NULL,
    distributionentitycode VARCHAR   NOT NULL,
    PRIMARY KEY (hcode)
);

CREATE TABLE DistributionLog
(
    hmy INT   NOT NULL,
    hcode INT   NOT NULL,
    distributionDate DATE   NOT NULL,
    distributiontype VARCHAR   NOT NULL,
    distributionamount INT   NOT NULL,
    PRIMARY KEY (hmy)
);

SELECT SUM(DL.distributionamount) AS Total, PY.sstate, PI.acquisitiondate, DL.distributionamount 
FROM DistributionLog AS DL
JOIN PropInfo AS PI
ON PI.hmy = DL.hcode
JOIN Property AS PY
ON PY.hmy = PI.hmy
WHERE distributionDate BETWEEN '2020-1-1' AND '2020-12-31'
GROUP BY PY.sstate, PI.acquisitiondate, DL.distributionamount
ORDER BY PY.sstate;

这是尝试过的:

在此处输入图像描述

你可以尝试这样的事情:

select p.sstate, sum(distributionamount)
from distributionlog d
inner join propinfo pi
  on d.hcode = pi.hcode
  and extract(year from acquisitiondate) = 2019
  and extract(year from distributiondate) = 2020
inner join property p on pi.hmy = p.hmy
group by p.sstate

在这个 SQL 中,我们将加入 3 个表格,就像您一直在做的那样。 我们在加入期间指定,以确保收购日期应在 2019 年,分发日期应从 2020 年开始。

由于您想要sum(DL.distributionamount)因此 DL.distributionamount不应在 group by 子句中。 下面的查询应该返回您在 2019 年获得并在 2020 年分发的属性的状态明智总和(DL.distributionamount)。(没有样本数据,我不清楚表之间的关系。所以我假设你做了加入权)

SELECT  PY.sstate, SUM(DL.distributionamount) AS Total
FROM DistributionLog AS DL
JOIN PropInfo AS PI
ON PI.hmy = DL.hcode and PI.acquisitiondate BETWEEN '2019-1-1' AND '2019-12-31'
JOIN Property AS PY
ON PY.hmy = PI.hmy
WHERE distributionDate BETWEEN '2020-1-1' AND '2020-12-31'
GROUP BY PY.sstate
ORDER BY PY.sstate;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM