我有一张桌子A
和相关表B
在表A
中加入唯一ID
我要计算表A
中的行,还要计算表A
中存在相关表B
我有查询
SELECT NameID,Area,Area !="" AS Kount,
b.tableaID > 0 AS `Visted`
FROM `tablea` a
LEFT OUTER JOIN tableb b ON a.ID=b.tableaID
GROUP BY a.ID,b.tableaID,Area
这给了我一个NameID和区域列表,每个区域仅显示一次,但显然在Kount and Visited中仅显示1。
例如,我在Kount上加了一笔金额。
SELECT NameID,Area,SUM(Area !="") AS Kount,
SUM(b.tableaID > 0) AS `Visted`
FROM `tablea` a
LEFT OUTER JOIN tableb b ON a.ID=b.tableaID
GROUP BY a.ID,b.tableaID,Area
非常感谢任何帮助。
答案 0 :(得分:0)
我将从对tableB的预查询开始,该查询由tableA ID列分组。现在回到原始的tableA,然后向LEFT-JOIN返回tableB的预查询结果。
select
A.*,
coalesce( BQry.bRecs, 0 ) as NumBRecords
from
tableA A
LEFT JOIN
( select
tableaID,
count(*) bRecs
from
tableB
group by
tableaID ) BQry
on A.id = BQry.tableaID
现在,表“ A”侧具有一个ID,我怀疑该ID是主键,并且在此表中再也没有“ ID”的任何重复项。因此,按照该ID对内部“ BQry”表进行分组是您左联接所具有的联接的基础。 “ A”侧将始终为1,因为它是查询的记录基础。
如果tableAID上没有这样的匹配项,则BQry记录的Coalesce()将为0,如果找到则为实际计数。
为了将来,请勿尝试扩大评论的答案...只需编辑您现有的帖子并为其添加其他详细信息即可。
版本
重新查看后,我看到您不是基于tableA ID进行外部求和,而是基于TableID进行名称计算。多个tableAID可以具有相同的名称引用。
select
A.NameID,
A.Area,
count(*) as NameCounts,
sum( coalesce( BQry.bRecs, 0 )) as NumBRecords
from
tableA A
LEFT JOIN
( select
tableaID,
count(*) bRecs
from
tableB
group by
tableaID ) BQry
on A.id = BQry.tableaID
分组依据 A.NameID, 面积