SQL数据分析-专题集合
sql吧
全部回复
仅看楼主
level 3
ministep 楼主
SQL专题集合;
SQL主要使用的是mysql数据库;
2019年05月21日 10点05分 1
level 3
ministep 楼主
Mysql账号密码***
方便学习SQL,这里免费提供一组Mysql服务器账号,可以直接上手操作;
主机名或者IP地址:111.230.56.74
端口:3306
用户名:ministep
密码:datastep
备注:为便于Mysql服务器管理,这里对 ministep的用户权限进行了限定;
ministep用户权限:
defaultdb数据库仅有查询权限,无其他增删改除权限;(defaultdb是管理员创建表,用作教程的数据表,用户可在此数据库查询;)
temp_db用户具有此数据库的全部权限,可以新建表,修改,查询,创建索引,可任意操作,搞坏了,不找你的;
无权限新建数据库;
鼓励在temp_db数据库做任何想做的事情,这里不受限制;
风险:数据库是公开的,因此上传到temp_db的所有内容,也是公开的,故请注意隐私保护;
2019年05月21日 10点05分 3
level 3
ministep 楼主
wx:SQL数据分析;
更新最新的SQL基础内容,业务知识,行业术语;
2019年05月21日 10点05分 6
level 3
ministep 楼主
学习步骤:把SQL必知必会 这本书全部撸一遍
再进阶学习;
然后再把 w3cshcool 撸一遍;
2019年05月21日 10点05分 7
level 3
ministep 楼主
sql实现同比,环比
环比和同比用于描述统计数据的变化情况。
同比增长率=(本期数-同期数)÷同期数×100%;
自然日情况下:
环比:昨日环比前一日;
同比:昨日周一环比上周周一;
因此:这里只计算同比,就可以了;
图片示意:
具体的代码如下:
```
select
t1.ptdate
,t1.area
,t1.goods_name
,t1.income
,ifnull(t1.income,0)/ifnull(t2.income,0)-1 as year_on_year_income
,t1.user_count
,ifnull(t1.user_count,0)/ifnull(t2.user_count,0)-1 as year_on_year_user_count
,'同比' as mark
from bdl_goods_income_public t1
join bdl_goods_income_public t2
on(t1.area=t2.area and t1.goods_name=t2.goods_name and t2.ptdate=DATE_SUB('2019-04-22',INTERVAL 6 day))
where t1.area ='china'
and t1.ptdate = '2019-04-22'
union all
select
t1.ptdate
,t1.area
,t1.goods_name
,t1.income
,0 as year_on_year_income
,t1.user_count
,0 as year_on_year_user_count
,'核对数据' as mark
from bdl_goods_income_public t1
where t1.area ='china'
and ptdate=DATE_SUB('2019-04-22',INTERVAL 6 day)
;
2019年05月21日 11点05分 9
图片有点不清楚,可以再图片上,选择新窗口打开,即可
2019年05月21日 11点05分
level 3
ministep 楼主
同比环比公式;
2019年05月21日 11点05分 10
level 3
ministep 楼主
mysql 标准建表语句:
##-- 目标表表结构
drop table if exists bi_app_huadong.tmp_dim_shop_info_daily;
CREATE TABLE if not exists bi_app_huadong.tmp_dim_shop_info_daily(
`id` bigint(11) NOT NULL AUTO_INCREMENT,
`date_id` varchar(50) COMMENT '数据日期',
`warehouse_code` varchar(50) default null COMMENT '大仓编码',
`warehouse_name` varchar(50) default null COMMENT '大区',
`city_name` varchar(50) COMMENT '城市',
`shop_code` varchar(50) COMMENT '点位编码',
`shop_name` varchar(50) COMMENT '点位名称',
`shop_status` int(11) COMMENT '点位状态 1:启用/运营;0其他状态',
`station_warehouse_code` varchar(50) COMMENT '微仓编码',
`station_warehouse_name` varchar(50) COMMENT '微仓地址',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY `pk_id` (`id`),
KEY `idx_date_id` (`shop_code`)
)
ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='点位微仓维度表';
2019年05月21日 11点05分 11
level 3
ministep 楼主
sql 保留两位小数+四舍五入
```
1. ROUND(该函数,只是负责四舍五入到两位小数,但是不负责截断 只留两位小数,例如下例:)
关于ROUND函数,我们平常理解为4舍5入,如:
print ROUND(13.145, 2);
结果为:13.150
2. 使用转换类型,才能达到保留两位小数位的目的:
select cast(13.145 as decimal(10, 2))
```
2019年05月28日 11点05分 12
level 3
ministep 楼主
日期
## mysql
* last_day(curdate());获取当月最后一天。
* DAYOFMONTH(last_day(curdate())); 返回date 对应的该月日期。当然这就是当月的天数。
* select curdate(); --获取当前日期
* select DATE_ADD(curdate(),interval -day(curdate())+1 day) --获取本月第一天
* select date_add(curdate()-day(curdate())+1,interval 1 month ) -- 获取下个月的第一天
2019年05月28日 11点05分 14
1