所以我有一个包含以下列的MySQL表:
PROPERTY_ID
AGENT_ID
STATUS
SALE_DATE
SALE_PRICE
ZIP
我想获得在给定邮政编码中销售至少一个房产的所有代理商的总销售额。这意味着,如果Bob Smith的AGENT_ID链接到ZIP 90210中的至少一个属性,那么我希望Bob Smith的所有销售额都包含在总数中。
我知道我可以通过以下方式执行此操作:
CREATE TEMPORARY TABLE `AGENTS` (`AGENT_ID` INT);
INSERT INTO `AGENTS` SELECT DISTINCT `AGENT_ID` FROM `PROPERTIES` WHERE ZIP = 90210;
SELECT SUM(p.`SALE_PRICE`) FROM `PROPERTIES` p, `AGENTS` a WHERE p.`AGENT_ID` = a.`AGENT_ID`;
我想知道的是,我可以在不将代理ID转储到临时表中来实现此目的吗?似乎有一种方法可以为此目的加入PROPERTIES表,但我不确定如何。任何想法都会非常感激......
答案 0 :(得分:2)
SELECT
AGENT_ID,
SUM(SALE_PRICE)
FROM PROPERTIES
WHERE AGENT_ID IN (SELECT AGENT_ID FROM PROPERTIES WHERE ZIP = 90210)
GROUP BY AGENT_ID;
这将为在90210中销售某些东西的每个代理商提供单独的总额 虽然你的问题没有说明,但这表明这就是你想要的。
答案 1 :(得分:0)
如果我理解,你实际上并不需要JOIN
,并且可以通过where子句中的select来完成此操作。 IN
子句为您提供在90210中已售出任何内容的所有代理,但不会将SUM()
的结果限制为90210中的那些属性记录。
SELECT SUM(SALE_PRICE)
FROM properties
WHERE AGENT_ID IN (SELECT AGENT_ID FROM properties WHERE ZIP = 90210);
如果您需要每个代理商的总和,请添加GROUP BY
:
SELECT AGENT_ID, SUM(SALE_PRICE)
FROM properties
WHERE AGENT_ID IN (SELECT AGENT_ID FROM properties WHERE ZIP = 90210)
GROUP BY AGENT_ID;