栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

连接语句中的sql double count

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

连接语句中的sql double count

考虑以下场景:

TableA记录的ID:{1、2、3、4、5},

TableB记录的ID:{1、2、3、5},

TableC记录的ID:{1、4、5}

从TableA a到TableA b的连接(a.ID = b.ID)的select *结果为{1,2,3,5}

从TableA a select TableC c on(a.ID = c.ID)选择*的结果是{1、4、5}

从TableA a(a.ID = b.ID)上的联接TableB b到(a.ID = c.ID)上的联接TableC c的select *结果为{1,5}

因此,如果您在分组依据之后进行计数或计数,则记录将有所不同。

作为您的代码,您可以使用左连接和sum(case end)作为以下代码:

select     nieruchomosci.nieruchomoscnr,     sum(case when wynajecia.nieruchomoscNr is null then 0 else 1 end) as wynajecia,     sum(case when wizyty.nieruchomoscnr is null then 0 else 1 end) as wizyty from     nieruchomoscileft join     wynajecia on (nieruchomosci.nieruchomoscnr = wynajecia.nieruchomoscNr)left join     wizyty on (wizyty.nieruchomoscnr = nieruchomosci.nieruchomoscNr)GROUP BY     nieruchomosci.nieruchomoscnr;

除了您的问题更新:

现在,您有了具有记录ID的TableA:{1、2、3、4}

表B是

TableAID Value1        B1-11        B1-22        B2-12        B2-24        B4-14        B4-2

表C为

TableAID Value1        C1-11        C1-21        C1-33        C3-13        C3-24        C4-1

三张表联接的结果

select * from TableA a join TableB b on (a.ID = b.ID) join TableC c on (a.ID = c.ID)

TableAID  TableB_Value TableC_Value1         B1-1         C1-11         B1-1         C1-21         B1-1         C1-31         B1-2         C1-11         B1-2         C1-21         B1-2         C1-34         B4-1         C4-14         B4-2         C4-1

因此,您得到了Count(B.Value):{1-> 6,4-> 2},Count(C.Value)相同。您需要的是Count(B.Value):{1->
2,2-> 2,4-> 2}和Count(C.Value):{1-> 3,3-> 2,4- > 1}

您更新的代码是正确的。但是为了获得更好的性能,您可以使用以下代码:

select nieruchomosci.nieruchomoscnr, ifnull(wynajecia.wynajecia_count, 0) as wynajecia_count, ifnull(wizyty.wizyty_count, 0)from nieruchomoscileft join(select wynajecia.nieruchomoscNr, count(*) as wynajecia_count from wynajecia group by  wynajecia.nieruchomoscNr) as wynajeciaon (wynajecia.nieruchomoscNr = nieruchomosci.nieruchomoscnr)left join(select wizyty.nieruchomoscNr, count(*) as wizyty_count from wizyty group by wizyty.nieruchomoscNr) as wizytyon (wizyty.nieruchomoscNr = nieruchomosci.nieruchomoscnr)

“ ifnull”功能适用于mysql。对于Oracle,它应该是“ nvl”,对于MS SQL,它应该是“ isnull”。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/517392.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号