[英]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");
該表顯示每個category
的sales
和returns
。
現在我想通過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_rate
為NULL
。
我認為這個問題是因為return_volume
與sales_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_volume
和return_volume
的SUM
以及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.