我想從列中找到負利潤和零利潤的比率。我嘗試使用聚合和子查詢來做到這一點,但它似乎不起作用,因為這兩種方法都回傳 0 值。代碼如下
SELECT
COUNT(CASE WHEN profit < 0 THEN 1
END) AS negative_profits,
COUNT(CASE WHEN profit < 0 THEN 1
END) / COUNT(profit),
COUNT(CASE WHEN profit = 0 THEN 1
END) AS zero_profits,
COUNT(CASE WHEN profit = 0 THEN 1
END) / COUNT(profit)
FROM sales;
SELECT (SELECT COUNT(*)
FROM sales
WHERE profit <= 0)/COUNT(profit) AS n_negative_profit
FROM sales;
兩個查詢都在值中回傳 0 在 此處輸入影像描述
uj5u.com熱心網友回復:
避免整數除法,它會截斷(就像阿德里安指出的那樣)。
此外,使用聚合FILTER運算式進行簡化:
SELECT count(*) FILTER (WHERE profit <= 0)::float8
/ count(profit) AS n_negative_profit
FROM sales;
如果profit已定義NOT NULL,或者以任一方式除以總數,則進一步優化:
SELECT count(*) FILTER (WHERE profit <= 0)::float8
/ count(*) AS n_negative_profit
FROM sales;
看:
- 使用其他(不同的)過濾器聚合列
uj5u.com熱心網友回復:
因為您正在按照檔案數學運算子/函式進行整數除法。
numeric_type / numeric_type → numeric_type
除法(對于整數型別,除法會將結果截斷為零)
所以:
select 2/5;
0
您需要輸入其中一個數字float或numeric:
select 2/5::numeric;
0.40000000000000000000
并使其更干凈:
select round(2/5::numeric, 2);
0.40
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/504859.html
標籤:sql PostgreSQL 聚合
