Mysql用group by子句计算百分比?

时间:2017-09-18 20:08:06

标签: mysql sql 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

我想在第一个内部选择中添加'Customer'组,即下面的内容,但显然会返回多行。

select count(1) / select count(1) from table where QUARTER( {CREATION_DATE {1}}

目前正在计算如二百二十五分之四* 100

使用groupby需要这样的百分比:

每个客户

) = 1 
 and Customer = 'ABC'

有人可以指导吗?

2 个答案:

答案 0 :(得分: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

(请注意,我没有对其进行测试,因此可能需要进行一些小修改。)

答案 1 :(得分: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
相关问题