2017-09-18 256 views
0

我有一個要求來計算客戶在第一季度內第一季度內客戶的百分比,並且狀態爲'可用'。我正在做這樣的事情,但沒有給出正確的結果。Mysql使用group by子句計算百分比?

SELECT DISTINCT Customer, COUNT(1)/(select count(1) from table where QUARTER(`Creation_Date`) = 1) 
FROM table 
WHERE Customer is not null and QUARTER(`Creation_Date`)=1 and `Status` = 'Available' 
GROUP BY Customer 

我想通過「客戶」在第一內選擇即什麼要補充的組像下面但這顯然返回多個行。

select count(1)/select count(1) from table where QUARTER( CREATION_DATE ) = 1 and Customer = 'ABC'

目前其計算像例如二百二十五分之四* 100。

需要個像這樣使用GROUPBY:

爲每一個客戶:

X = select count(1) from table where QUARTER(`Creation_Date`) = 1 and Customer = 'X' and Status = 'Available'; 
Y = select count(1) from table where QUARTER(`Creation_Date`) = 1 and Customer = 'X'; 
Z = X/Y*100 

可有人請引導?

+3

不要混合'distinct'和'group by'。你可能會迷惑自己。 – GolezTrol

回答

1

我認爲你誤解了百分比要求的含義。很可能你需要在整個集合中找到「可用」的百分比。爲此,您需要計算「可用」的數量並將其除以總數。您需要彙總所有客戶,因此您不應選擇客戶。相反,你應該選擇季度。總體而言,您SQL可能是這樣的:

SELECT 
    QUARTER(`Creation_Date`) AS "quarter", 
    SUM(CASE WHEN `Status`='Available' THEN 1 ELSE 0 END)/COUNT(1) AS "pct" 
WHERE 
    Customer is not null and QUARTER(`Creation_Date`)=1 
GROUP BY 
    Customer 

(請注意,我沒有測試,所以可能需要一些小的修改)

+0

需要這樣的比例: X =從QUARTER('Creation_Date')= 1且Customer ='X'和Status ='Available'的表中選擇count(1); Y =從其中QUARTER('Creation_Date')= 1且Customer ='X'的表中選擇count(1); Z = X/Y * 100 –

+1

這就是我答案中的SQL所做的 - 只需在where子句中添加'和customer = X'並將分數乘以100 –

+0

雖然這會給你一堆結果 - 而你'不會知道哪個是哪個 – Strawberry

1

你不需要子選擇。您可以將可用客戶數量除以客戶總數。如果要以百分比表示,請乘以100:

請注意,COUNT只計數非空的值。或者,您可以使用SUM,因爲COUNT(1)SUM(1)基本相同。

SELECT 
    COUNT(CASE WHEN `Status` = 'Available' THEN 1 END)/COUNT(1) * 100 AS Percentage 
FROM table 
WHERE Customer is not null and QUARTER(`Creation_Date`)=1 
+1

當然SUM案例 – Strawberry

+0

@Strawberry,兩者都可以工作,因爲我的'case'返回NULL值不可用,'count'不計數爲空值。如果您根據可用性返回1或0,那麼您需要'SUM',因爲count會計數每個值,即使是'0'。 – GolezTrol

+0

好吧,我想這就夠了。 – Strawberry