Mysql是否使用GROUPBY子句计算百分比?

Mysql是否使用GROUPBY子句计算百分比?,mysql,sql,group-by,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` = 'Availabl

我需要计算第一季度内客户占第一季度客户的百分比,并且状态为“可用”。我正在做这样的事情,但没有给出正确的结果

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”分组,例如下面这样的内容,但这显然会返回多行

选择计数(1)/从表中选择计数(1),其中季度(
创建日期
)=1
客户='ABC'

目前其计算类似于4/225*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

有人能给我引路吗?

我想你误解了百分比要求的含义。最有可能的情况是,您需要找到整个集合中“可用”的百分比。为此,您需要计算“可用”的数量并将其除以总数。您需要对所有客户进行聚合,因此不应选择客户。相反,您应该选择季度。总的来说,您的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

(请注意,我没有测试它,因此可能需要一些小的修改。)

我认为您误解了百分比要求的含义。最有可能的情况是,您需要找到整个集合中“可用”的百分比。为此,您需要计算“可用”的数量并将其除以总数。您需要对所有客户进行聚合,因此不应选择客户。相反,您应该选择季度。总的来说,您的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

(请注意,我没有测试它,因此可能需要一些小的修改。)

您不需要子选择。您只需计算可用的客户数,然后将其除以客户总数即可。如果要将其表示为百分比,请乘以100:

请注意,
COUNT
仅统计非空值。或者,您可以使用
SUM
,因为
COUNT(1)
基本上与
SUM(1)
相同


您不需要子选择。您只需计算可用的客户数,然后将其除以客户总数即可。如果要将其表示为百分比,请乘以100:

请注意,
COUNT
仅统计非空值。或者,您可以使用
SUM
,因为
COUNT(1)
基本上与
SUM(1)
相同


不要将
不同的
分组方式
混在一起。你很可能会把自己搞糊涂。不要把
distinct
groupby
混在一起。您可能会感到困惑。需要这样的百分比:X=从表中选择计数(1),其中季度(
创建日期)=1,客户='X',状态='Available';Y=从表中选择计数(1),其中季度(
Creation_Date
)=1,客户='X';Z=X/Y*100这就是我的答案中的SQL所做的-只需将
和customer=X
添加到where子句中,然后将分数乘以100,这将得到一系列结果-您将不知道哪个百分比需要这样的百分比:X=从表where quarty(
Creation\u Date
)中选择count(1)=1,客户='X'和状态='Available';Y=从表中选择计数(1),其中季度(
Creation_Date
)=1,客户='X';Z=X/Y*100这就是我的答案中的SQL所做的-只需将
和customer=X
添加到where子句中,然后将分数乘以100,这将得到一系列结果-但您不会知道哪个是真正的和Case@Strawberry,两者都可以工作,因为我的
案例
返回
NULL
for unavailable,并且
count
不计算空值。如果根据可用性返回1或0,则需要
SUM
,因为count计算每个值,甚至
0
。我想这是正确的。当然是SUMCase@Strawberry,两者都可以工作,因为我的
case
返回
NULL
表示不可用,而
count
不计算NULL。如果根据可用性返回1或0,则需要
SUM
,因为count计算每个值,甚至
0
。我想这是真的。