统计出库数,sql查询数据,sqldf做透视表,循坏处理数据
#设置工作路径 D:\资料\天富盈\天富盈\erp\erp录入
setwd("D:\\资料\\程序文档")#设置文件名
path="C:\\Users\\Jarvis\\Desktop\\12月平台品类数据.xlsx"sql_yuju<-"SELECT * FROM edb_orderWHERE SUBSTRING(`订货日期`,1,10) >= '2019-12-01'AND SUBSTRING(`订货日期`,1,10) <= '2019-12-31'"#导入包
library(openxlsx)
library(dplyr)
library(sqldf)
#library(RMySQL)#链接数据库
con<-RMySQL::dbConnect(RMySQL::MySQL(),host='127.0.0.1',port=3306,dbname="team fortune",user="root",password="123456")
#查看数据库里所有的表
dbListTables(con)
#设置编码 GBK
dbSendQuery(con,'SET NAMES GBK')
#查询数据
E<-dbGetQuery(con,sql_yuju)str(E)
#E店宝数据
#E<-read.csv('12月.csv',header=TRUE,sep=',',colClasses="character")#店铺名称对照表连入D:\资料\天富盈\天富盈
duizhao<-read.xlsx('D:\\资料\\天富盈\\天富盈\\对照表.xlsx',1)E<-left_join(E,duizhao,by="产品名称")
names(E)
unique(E$店铺名称)#按店铺筛选
TM_E<-E[which(E$店铺名称=="【天】chocky旗舰店"),]
TB_E<-E[which(E$店铺名称=="【淘】泰好吃食趣"),]
JD_POP_E<-E[which(E$店铺名称=="【京】比斯奇果屋巧客旗舰店"),]
JD_ZHUAN_E<-E[which(E$店铺名称=="【京】天富盈食品专营店"),]
PDD_E<-E[which(E$店铺名称=="【拼】比斯奇果屋巧客食品旗舰店"),]
WPH_E<-E[which(E$店铺名称=="【唯】唯品会"),]
YZ_E<-E[which(E$店铺名称=="【赞】泰国比斯奇果屋巧客"),]
XHY_E<-E[which(E$店铺名称=="【黑】小黑鱼APP"),]
XCX_E<-E[which(E$店铺名称=="小程序"),]
HSQ_E<-E[which(E$店铺名称=="好食期"),]
shopname<-c(substitute(TM_E),substitute(TB_E),substitute(JD_POP_E),substitute(JD_ZHUAN_E),substitute(PDD_E),substitute(WPH_E),substitute(YZ_E),substitute(XHY_E),substitute(XCX_E),substitute(HSQ_E))#销售量汇总
##分类汇总
toushi<-function(tablename){#做数据透视表,构建sql语句sql<-paste('select "产品名称",sum(订货数量),sum("实付金额"),"修改后名称" from ',tablename,' group by "产品名称"',sep=" ")shops<-sqldf(sql)names(shops)<-c("产品名称","订货数量","实付金额","修改后名称")return(shops)
}##数据处理 将分类名中有X的乘入 +号分开
clean<-function(tablname){#提取修改名后有X的名称doubles<-grep(pattern = "X",x = tablname$修改后名称,value = F)#提取乘以倍数LastBate<-as.integer(substr(tablname[doubles,]$修改后名称,nchar(tablname[doubles,]$修改后名称),nchar(shop[doubles,]$修改后名称)))#将订货数量乘以倍数,去掉修改名称后面的乘项tablname[doubles,]$订货数量 <- tablname[doubles,]$订货数量 * LastBate tablname[doubles,]$修改后名称<-substr(tablname[doubles,]$修改后名称,1,nchar(tablname[doubles,]$修改后名称)-2)#提取修改名中有 + 的名称adds<-grep(pattern = "\\+",x = tablname$修改后名称,value = F)if (length(adds)!=0) {#将有+的数据剔除,复制到新表tichu<-tablname[adds,]tablname<-tablname[-adds,]#将修改名中有 + 的名称用+切割为listxx<-strsplit(tichu$修改后名称,split = "\\+")#将有+的数据循环写回原来的表for (j in c(1:length(adds))) {print("开始处理这个表")pro<-cbind(tichu$产品名称[j],tichu$订货数量[j],tichu$实付金额[j]/length(xx[[j]]),xx[[j]])#print(pro)colnames(pro)<-colnames(tablname)tablname<-rbind(tablname,pro)}}else {print("这个表无需处理")} return(tablname)
}#循环查询
mydata<-list()
for (i in shopname) {shop<-toushi(i)shop<-clean(shop)#再进行一次透视处理sql<-paste('select "修改后名称",sum(订货数量),sum("实付金额") from ',substitute(shop),' group by "修改后名称"',sep=" ")shops<-sqldf(sql)names(shops)<-c("产品名称","订货数量","销售额")shops<-arrange(shops, desc(shops$订货数量))mydata[[i]]<-shops
}# 总体数据
shuju<-matrix(NA,0,3)
colnames(shuju)<-names(mydata[[1]])
shuju<-as.data.frame(shuju)
for (j in mydata){shuju<-rbind(shuju,j)
}
shuju<-sqldf('select "产品名称",sum(订货数量) "订货数量",sum("销售额") "销售额" from shuju group by "产品名称" order by 订货数量 DESC')#写出list
names(mydata)<-c("天猫", "淘宝","京东旗舰店" ,"京东专营店","拼多多","唯品会" ,"有赞" ,"小黑鱼","小程序","好食期")
shuju<-list(shuju)
#写出
write.xlsx(c("总体"=shuju,mydata), path)
统计出库数,sql查询数据,sqldf做透视表,循坏处理数据相关推荐
- 主要是sql查询符合在圆形,多边形区域经纬度的数据
主要是sql查询符合在圆形,多边形区域经纬度的数据 查询 圆形 中心点 + 距离 drop table if exists demo; CREATE TABLE `demo` (`id` int(5) ...
- NO.111 禅道导出数据做透视表,让你轻松做年终工作总结。
为什么80%的码农都做不了架构师?>>> 年底了,很多公司都要求大家写年终工作总结.估计很多童鞋就开始犯愁了.年年写,来来去去总是那些模式,自己都觉得没意思. 今天,教大家一招 ...
- Excel的数据透视表怎么弄 ?数据透视表怎么做汇总求和
使用Excel进行求和,除了运用函数之外,还可以插入数据透视表进行求和,数据透视表怎么做呢?小编使用WPS里的Excel给大家演示一遍. 步骤一:打开需要求和的表格,点击最上方的工具栏里的" ...
- web常用通用组件+Axure后台管理系统框架模板+大屏数据可视化元件库+智慧社区管理系统大屏+图表组件+表单组合+智慧数据看板+通用大屏图表原件库+电脑端常用组件
作品介绍:web常用通用组件+Axure后台管理系统框架模板+大屏数据可视化元件库+智慧社区管理系统大屏+图表组件+表单组合+智慧数据看板+通用大屏图表原件库+电脑端常用组件 Axure原型演示及下载 ...
- 编写一个 SQL 查询,来删除 Person表中所有重复的电子邮箱,重复的邮箱里只保留 Id 最小 的那个。
题目 编写一个 SQL 查询,来删除 Person表中所有重复的电子邮箱,重复的邮箱里只保留 Id 最小的那个. Id Email 1 john@example.com 2 bob@example.c ...
- 编写一个 SQL 查询,来删除 Person表中所有重复的电子邮箱,重复的邮箱里只保留 Id 最小 的那个。
题目 编写一个 SQL 查询,来删除 Person表中所有重复的电子邮箱,重复的邮箱里只保留 Id 最小 的那个. +----+------------------+ | Id | Email | + ...
- Sql Server 数据库,只复制表结构不复制表数据如何操作?
Sql Server 数据库,只复制表结构不复制表数据如何操作? 1.选中要复制的数据库 2.右键 3.任务 4.生成脚本 5.弹出生成数据库对象的脚本窗口,点下一步 6.选择要编写脚本的数据库对象, ...
- 从大数据量分库分表 MySQL 合并迁移数据到 TiDB
如果分表数据总规模特别大(例如大于 1 TiB),并且允许 TiDB 集群在迁移期间无其他业务写入,那么你可以使用 TiDB Lightning 对分表数据进行快速合并导入,然后根据业务需要选择是否使 ...
- excel透视表计数去重_Excel数据透视表中的唯一计数
excel透视表计数去重 In a previous article, Roger Govier showed us a couple of different ways to get a Uniq ...
最新文章
- D~信息学/计算机专业操作
- 给GAN一句描述,它就能按要求画画,微软CVPR新研究 | 附PyTorch代码
- RTMPdump(libRTMP) 源代码分析 9: 接收消息(Message)(接收视音频数据)
- 2021年全新各方向IT职业技能图谱
- 符缓冲流复制Java文件
- 设计模式:状态模式(State)
- 阿里巴巴加入 Linux 基金会
- mysql字段是否存在_mysql判断列是否存在
- 机房线路故障,引发多家公司不能上网,和自己de经历有感
- 域渗透——Local Administrator Password Solution
- 《htmlxhtml权威指南》部分标签语义学习
- java after 函数_函数周期表丨信息丨值丨ISONORAFTER
- 最大文件打开数的正确修改姿势
- 状态机finite-state machine学习笔记1
- 车牌定位html5,车牌识别(一)——车牌定位(附详细代码及注释)
- 适合财务人员的财务报表分析软件有哪些?
- SQL server 2005下载地址
- 几何分布的期望和方差公式推导_机器学习常用的方差、协方差与皮尔逊值
- 二次开发Spark实现JDBC读取远程租户集群Hive数据并落地到本集群Hive的Hive2Hive数据集成【Java】
- Ubuntu16.04 桌面 launcher 丢失