gpt4 book ai didi

sql-server - 单个查询中多个表中的多个 COUNT SELECTS

转载 作者:行者123 更新时间:2023-12-04 04:40:30 25 4
gpt4 key购买 nike

我有不同的表 4,它们是站点、工作、笔记和 PO。站点是位置,一个站点可以有多个工作,工作可以有多个笔记和 PO,现在我喜欢根据站点编号选择所有工作,并在单个查询中使用笔记和 PO 的数量我如何使用单个查询来做到这一点.我使用了这个查询,但这仅显示 PO 计数。使用 SQL-Server 数据库

SELECT jobid, job_title, po_id, count(po.po_id) PO_count, count(notes) note_count
FROM notes
LEFT JOIN job ON jobid = notes_job_id
LEFT JOIN po ON po_job_id = job_id
LEFT JOIN site_detail ON site_id = _job_si_id
LEFT JOIN site_list ON sitelist_id = site_sitelist_id
WHERE site_id = 116291
GROUP BY jobid, job_title, po_id

请帮忙,提前致谢,

最佳答案

像这样的东西:

select jobid, job_title, 
(select count(po.po_id) from po where po.po_job_id=jobid) as PO_count,
(select count(note.id) from notes where notes.notes_job_id=jobid) as note_count,
from job
where site_id = 116291

您应该能够使用任意数量的“子选择作为列”模式来获取不同的计数。另一个好处是它不需要重构您的实际主查询。

列名和联接结构不准确.. 您必须填补空白。

我发现您的数据库和命名约定不清楚且相当差。为什么不使用表名/别名作为限定符?这意味着您可以在不同的表中命名相同的外键列,因此连接将非常清晰和明显,而不是给它们添加前缀的丑陋技巧。

我会非常简单地设计它:
notes.FK_JOB      -> job.ID
po.FK_JOB -> job.ID
site_jobs.FK_SITE -> site.ID
site_jobs.FK_JOB -> job.ID

这不是很简单吗?

我也不知道 PO 是什么,除了它容易发生冲突(与别名、其他列、临时名称)和信息不足。两者都因为它非常短。

关于sql-server - 单个查询中多个表中的多个 COUNT SELECTS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18978010/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com