![](/img/trans.png)
[英]MySQL: How to select and display ALL rows from one table, and calculate the sum of a where clause on another table?
[英]get all rows from one table, sum on column from a second table using a where clause
我想获取table1中的所有行,并且我想在table3中为table1中的每个人获得总共一列。 如果我不在查询中的任何地方使用where子句(在sub select,inner join或regular where子句中),我可以这样做。 如果我使用如下所示的where子句,则只有table1中的人员在提供的日期之间的table2中有记录并且已经过验证。
我想要的是来自table1的所有行,但只将table2中的记录与提供的日期之间的记录进行求和。
有没有办法在单个查询中执行此操作?
SELECT table1.ID
, table1.LName
, table1.FName
, (Select SUM(table3.DollarValue) Where table2.Verified = 1) AS total
FROM table3
INNER JOIN table2 ON table3.IncentiveID = table2.IncentiveID
RIGHT OUTER JOIN table1 ON table2.ID = table1.ID
Where table2.date >= '1/1/2012'
AND table2.date <= '12/31/2012'
AND table2.Verified = 1
Group By table1.ID, table1.LName, table1.FName, table2.Verified
Order By table1.LName, table1.FName
预先感谢您的任何帮助!
根据您的描述,听起来您想要类似以下内容。 哪个将table2
和table3
连接起来并将sum()
放在带有WHERE
过滤的子查询中,然后将该结果连接到table1
:
SELECT t1.ID,
t1.LName,
t1.FName,
IsNull(t.total, 0) as Total
FROM table1 t1
LEFT JOIN
(
SELECT t2.id, SUM(t3.DollarValue) as total
FROM table2 t2
INNER JOIN table3 t2
on t2.IncentiveID = t3.IncentiveID
WHERE t2.date >= '2012-01-01'
AND t2.date <= '2012-12-31'
AND t2.Verified = 1
GROUP BY t2.id
) t
on t1.ID = t.ID
Order By t1.LName, t1.FName;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.