簡體   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