sql - 查询table1的所有列left join和table2的count
问题描述
我无法让这个查询工作:
不工作
select
Region.*, count(secteur.*) count
from
Region
left join
secteur on secteur.region_id = Region.id
我找到的解决方案是这样,但是有没有更好的使用连接的解决方案,或者这不会影响性能,因为我有一个非常大的数据集,大约 500K 行
工作但害怕性能问题
select
Region.*,
(select count(*)
from Secteur
where Secteur.Region_id = region.id) count
from
Region
解决方案
我会建议:
select region.*, count(secteur.region_id) as count
from region left join secteur on region.id = secteur.region_id
group by region.id, region.field2, region.field3....
请注意,这count(table.field)
将忽略空值,而count(*)
将包括它们。
或者,在子查询上左连接并用于coalesce
避免空值:
select region.*, coalesce(t.c, 0) as count
from region left join
(select region_id, count(*) as c from secteur group by region_id) t on region.id = t.region_id
推荐阅读
- xamarin - Xamarin.Forms MasterDetailPage,其中部分母版在详细信息中可见
- azure - 安装在 Azure 云中的 Kubernetes 日志系统
- crystal-reports - 如果在第一条记录上提交,否则在水晶报告中求和变量 numberVar
- typescript - IntelliJ IDEA:如何禁用/忽略特定的自动导入建议?
- php - 如何在 Laravel 5.6 中将 Cron 条目添加到 WAMP localhost
- c# - 如何从 App.xaml.cs 中的关闭窗口获取信息?
- ios - 添加真实数据后,从不调用 Tableviews“cellForRowAt”
- google-apps-script - 谷歌脚本只转发带有大附件的收件箱
- java - 性能:Google Dataflow 将 avro 文件写入 GCS
- freebsd - 什么是 Windows“netstat 1”的 FreeBSD 等价物