sql - 如何在postgres中执行减法

标签 sql postgresql

我有以下两个查询,一个是给我总零件作为输出,另一个是给我总分派(dispatch)零件作为输出。我的目标是获得将由“总零件 - 分派(dispatch)零件”给出的总待处理零件。我将如何直接从查询中获得此结果。

代码:

--total parts

select
    dispatches.id,
    count(parts.id) as total_parts
from dispatch_projects,dispatches,parts 
where
    dispatches.id=dispatch_projects.dispatch_id and
    parts.project=dispatch_projects.project and
    parts.ignore=false and
    dispatch_projects.deleted = false and
    dispatches.created > now() - interval '15 days'
group by  dispatches.id
order by dispatches.id

--total dispatched parts




select
    dispatches.id,
    count(parts.id) as dispatched_parts
from dispatch_projects,dispatches,parts,boxes
where
    dispatches.id=dispatch_projects.dispatch_id and
    parts.project=dispatch_projects.project and
    parts.box_id=boxes.id and
    boxes.project=dispatch_projects.project and
    parts.ignore=false and
    dispatch_projects.deleted = false and
    dispatches.created > now() - interval '15 days'
group by  dispatches.id
order by dispatches.id

最佳答案

我们可以在单个查询中获得您想要的结果。

请注意,您的第二个查询与第一个查询的主要区别在于对 boxes 表的额外连接。结果,术语 count(parts.id) 实际上在第一个查询中计算了零件的数量,现在将在第二个查询中计算盒子的数量。但是,我们仍然可以通过取 count(distinct parts.id) 来获取第二个查询中的总零件数。这是有效的,因为它会忽略由于加入 boxes 表而可能发生的部件上的任何重复。考虑以下查询:

SELECT
    d.id,
    COUNT(DISTINCT p.id) - COUNT(p.id) as result
FROM dispatch_projects dp
INNER JOIN dispatches d
    ON d.id = dp.dispatch_id
INNER JOIN parts p
    ON p.project = dp.project
INNER JOIN boxes b
    ON p.box_id = b.id AND
       b.project = dp.project
WHERE
    p.ignore = false AND
    dp.deleted = false AND
    d.created > now() - INTERVAL '15 days'
GROUP BY
    d.id
ORDER BY
    d.id;

请注意,我已将您的逗号分隔连接替换为显式内部连接。这被认为是首选语法。

关于sql - 如何在postgres中执行减法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48982037/

相关文章:

基于 MySQL 标签的系统

python - SQLAlchemy:有没有办法跟踪通过 SQLAlchemy 完成的查询的行号和调用类?

ruby-on-rails - 在 Mountain Lion 上使用 Homebrew 和 Rails 安装 postgresql

postgresql - 寻找适用于 Mac 的免费(ish)PostgreSQL 数据库查看器

c# - 将 byte[] 作为参数传递给 ReportViewer

php - SQL 不保存值 ò,à,ù,è

sql - 如何显示一年中每周发生的行?

sql - SELECT WHERE 列值位于数组中

具有 docker 所有权问题的 PostgreSQL

postgresql - 替换 Postgres 中的不间断空格 (%A0)