首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >比较两个表中的值并计算它们的差异

比较两个表中的值并计算它们的差异
EN

Stack Overflow用户
提问于 2020-04-12 14:24:04
回答 2查看 152关注 0票数 2

DB-Fiddle

代码语言:javascript
复制
/* Table Sales */
CREATE TABLE sales (
    id int auto_increment primary key,
    product VARCHAR(255),
    KPI VARCHAR(255),
    sales_volume INT
);

INSERT INTO sales
(product, KPI, sales_volume)
VALUES 
("Product A", "sold", "500"),
("Product A", "sold", "300"),
("Product B", "sold", "200"),
("Product C", "sold", "300"),
("Product D", "sold", "900");


/* Table Logistics */
CREATE TABLE logistics (
    id int auto_increment primary key,
    product VARCHAR(255),
    KPI VARCHAR(255),
    quantity INT
);

INSERT INTO logistics
(product, KPI, quantity)
VALUES 
("Product A", "outbound", "800"),
("Product B", "outbound", "100"),
("Product B", "outbound", "400"),
("Product C", "outbound", "250"),
("Product D", "outbound", "900");

预期结果:

代码语言:javascript
复制
product         value_in_sales      value_in_logistics      differnce_of_values
Product A        800                     800                       0
Product B        200                     500                       300
Product C        300                     250                       -50
Product D        900                     900                       0

在上面的示例中,我有两个表,名为saleslogistics

我的目标是比较表sales中KPI soldsold和表logistics中KPI outboundquantity

我尝试使用UNION ALL,但是它只对两个表的值进行排序,而不是按照预期的结果进行比较。

代码语言:javascript
复制
SELECT
product,
KPI,
SUM(sales_volume)
FROM sales
GROUP BY 1

UNION ALL

SELECT
product,
KPI,
SUM(quantity)
FROM logistics
GROUP BY 1

要获得预期的结果,需要在查询中更改哪些内容?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-12 14:28:47

使用子查询&做进一步的聚合:

代码语言:javascript
复制
SELECT Product, SUM(logistics),  SUM(Sales),
       SUM(logistics) - SUM(Sales)
FROM (SELECT product, 0 AS logistics, SUM(sales_volume) AS Sales
      FROM sales
      WHERE KPI = 'sold'
      GROUP BY Product
      UNION ALL
      SELECT product, SUM(quantity), 0 
      FROM logistics
      WHERE KPI = 'outbound'
      GROUP BY Product
     ) t
GROUP BY Product;
票数 0
EN

Stack Overflow用户

发布于 2020-04-12 14:27:02

您可以执行union all,然后再次聚合:

代码语言:javascript
复制
SELECT product, SUM(sales) as sales, SUM(logistics) as logistics,
       (SUM(logistics) - SUM(sales)) as diff
FROM ((SELECT product, SUM(sales_volume) as sales, 0 as logistics
       FROM sales
       WHERE KPI = 'sold'
       GROUP BY product
      ) UNION ALL
      (SELECT product, 0, SUM(quantity)
       FROM logistics
       WHERE KPI = 'outbound'
       GROUP BY product
      )
     ) p
GROUP BY product;

即使这两个表没有完全相同的产品,这种方法也是有效的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61172928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档