R语言dplyr:按另一表列排序并统计CAR表计数与占比
车辆数据统计排序实现
基础表结构
现有两张业务表:
CAR表:存储全量车辆信息,包含可重复的车名字段,表样例如下:
RANK表:存储不同车名对应的排序优先级配置,表样例如下:
需求目标
需要完成两个核心处理逻辑:
- 统计
CAR表中每个车名的出现次数,同时计算该车名车辆数占总车辆数的百分比 - 统计完成后的结果集,需要严格按照
RANK表中配置的排名顺序排序
期望输出的结果样例如下:
实现代码(MySQL语法)
实现逻辑分三步:先聚合统计单车名的车辆数,再计算全表总车辆数用于占比换算,最后关联排名表取排序权重完成排序:
SELECT c.car_name AS 车名, c.cnt AS 车辆数, CONCAT(ROUND(c.cnt / total.total_cnt * 100, 2), '%') AS 占比 FROM ( SELECT car_name, COUNT(*) AS cnt FROM CAR GROUP BY car_name ) c, (SELECT COUNT(*) AS total_cnt FROM CAR) total LEFT JOIN RANK r ON c.car_name = r.car_name ORDER BY r.rank ASC;
注意:如果使用SQL Server、PostgreSQL等其他数据库,需要把整数除法做显式转换,比如把占比计算部分改成
c.cnt * 1.0 / total.total_cnt避免整除丢失精度,字符串拼接函数如果有差异对应调整即可。
内容的提问来源于stack exchange,提问作者Helen Osborne
相关产品推荐
相关产品推荐

