繁体   English   中英

如果值位于表中的不同行,则计算平均值

[英]Calculate averages if values are in different rows in the table

数据库小提琴

CREATE TABLE sales (
    id int primary key,
    category VARCHAR(255),
    event_date DATE,
    sales_volume VARCHAR(255), 
    return_volume VARCHAR(255)
);

INSERT INTO sales
(id, category, event_date, 
sales_volume, return_volume
)
VALUES 
("1", "CAT_01", "2018-05-30", "500", NULL),
("2", "CAT_01", "2018-06-05", NULL, "450"),
("3", "CAT_02", "2019-07-08", "700", NULL),
("4", "CAT_02", "2019-07-18", NULL, "670");

该表显示每个categorysalesreturns

现在我想通过returns/sales计算return_rate
结果应如下所示:

Category      sales_volume      return_volume       return_rate
CAT_01           500               450                0.90
CAT_02           700               670                0.96

我试着用这个查询:

SELECT
category,
sales_volume,
return_volume,
return_volume / sales_volume as return_rate
FROM sales;

但是,当我运行此查询时,我的return_rateNULL
我认为这个问题是因为return_volumesales_volume位于不同的行中。

我如何修改我的查询以获得预期的结果?

再次检查所有内容后,我发现我的计算机上的HeidiSQL运行查询,即使它看起来像这样:

SELECT
category,
sales_volume,
return_volume,
sum(return_volume) / sum(sales_volume) as return_rate
FROM sales;

结果是这样的:

Category      sales_volume      return_volume       return_rate
CAT_01           0                  0                 0.90
CAT_02           0                  0                 0.96

当我在DB - Fiddle 中运行此查询时,它无法通过,因为sales_volumereturn_volumeSUM以及GROUP BY 1丢失。

一旦我修改我的查询,它看起来像这样:

SELECT
category,
sum(sales_volume),
sum(return_volume),
sum(return_volume) / sum(sales_volume) as return_rate
FROM sales
GROUP BY 1;

我也会在这里得到正确的结果DB-Fiddle

当然,这个问题的其他答案也适用。

使用coalesce()替换null值并进行聚合:

SELECT category, 
       SUM(coalesce(sales_volume, 0)) AS sales_volume, 
       SUM(coalesce(return_volume, 0)) AS return_volume,
       SUM(coalesce(return_volume, 0)) / SUM(coalesce(sales_volume, 0)) AS return_rate
FROM sales
group by category;

我想你可以试试下面的查询 -

SELECT
category,
MAX(sales_volume),
MAX(return_volume),
MAX(return_volume) / MAX(sales_volume) as return_rate
FROM sales
GROUP BY category;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM