如何获取列中子类别的百分比

问题描述 投票:0回答:1

我使用的是mysql工作台8.0

我正在自学 SQL,目前正在开始一些带有大量谷歌搜索的指导项目。现在我正在处理this数据:

这是我正在处理的相关部分:

分行 客户类型
A 会员
C 正常
A 正常
A 会员
B 正常

不断地。我目前拥有的是以下内容:

分行 客户类型 cust_num
A 会员 167
A 正常 173
B 会员 165
B 正常 167
C 会员 169
C 正常 159

我想要的是 cust_num 列旁边的另一列,其中包含每种类型每个分支机构的总客户百分比,所以基本上:

分行 客户类型 cust_num 百分比
A 会员 167 49
A 正常 173 51
B 会员 165 50
B 正常 167 50
C 会员 169 52
C 正常 159 48

这是我尝试过的 2 个最有前途的解决方案

  1. 我实际上使用了这个解决方案和以下代码:
with rawdata as 
(SELECT branch, `Customer Type`, count(`Customer Type`) as type_count
from sales
group by 1)
groupeddata as
(SELECT `Customer Type`, count(`Customer Type`) as totalcust
from sales
Group by 1
)
SELECT r.branch, r.`Customer Type`, r.type_count, r.type_count/g.totalcust * 100.0 as percentage
from rawdata r
JOIN groupeddata g on r.`customer type` = g.`customer type`
order by 1

这给了我一个我认为的客户类型百分比,但我想要一个分支机构内的客户类型百分比。我还尝试将分支放入分组数据中,并将其放入代码的 JOIN 部分,但随后百分比全部更改为 100%

以防万一我想太多了,我尝试了

select branch, `customer type`, count(`customer type`) as type_count,
(SELECT count(`customer type`)/sum(`Customer type`)) As percentage from sales
group by 1,2
order by 1

返回空值。我知道问题是 sum(

customer type
),因为它不是一个数字,但是当我尝试将其切换到 type_count/count(
customer type
) 时,它给了我一个错误,指出 type_count 不存在

sql mysql subquery percentage
1个回答
0
投票

使用

SUM(cust_num)
获取每个分店的客户总数,而不是
count(`Customer Type`)
。这是行数,而不是顾客数量。

WITH total_cust AS (
    SELECT branch, SUM(cust_num) AS total
    FROM sales
    GROUP BY branch
)
SELECT s.*, ROUND(100 * s.cust_num / t.total) AS percentage
FROM sales AS s
JOIN total_cust AS t ON s.branch = t.branch
ORDER BY s.branch, s.`Customer Type`
© www.soinside.com 2019 - 2024. All rights reserved.