试想这样一个场景,你的领导大卫端着咖啡杯向你的工位这边走来,并在你的旁边停了下来,喝了一口杯中的咖啡,嘴中慢慢的说出这样一句话:“客户有一个报表要的比较急,邮件已经发你了,评估一下时间,相关的细节可以直接在微信群里问客户,有疑问直接问XX。”
在准备动手做之前,你将接下来需要做的事情,在脑中预演了很多遍,为了找出最高效完成任务的方式,按照这个方式,你高效,快速的完成了任务,因此你获得了领导的重视,以及客户的褒奖。
整个过程步骤如下
- 开发环境准备(BI工具,数据库)
- 账号信息(数据库连接信息,VPN账号,应用服务器,数据库服务器信息)
- 将业务需求转换成SQL
- 制作,发布报表
开发环境准备
BI工具:Tableau Desktop 2018.3.
BIServer:Tableau Server Online
数据库:Mysql 8.0.12
账号信息
请相关人员,按照如下格式提供相关信息。
数据库信息
Host:
Port:
Database:
Username:
Password:
服务器信息
PCname:
Username:
Password:
VPN
RemoteHost:
UserNmae:
Password:
Domain:
下面是详解
DataSource Connection
拿到数据库连接信息之后,你可能会发现,指定的数据库IP是无法访问的,为了安全着想,数据库一般不会开放外网访问的权限,需要使用VPN账号连接之后,才能访问数据库。
Host:
Port:
Database:
Username:
Password:
Example
Host:192.168.0.1
Port:1433
Database:bglass
Username:sa
Password:123456
Vpn
RemoteHost:
UserNmae:
Password:
Domain:
Example:
RemoteHost:vpn2.bglass.com
UserNmae:legao
Password:123456
Domain:bglass.com
服务器登录信息
PCname:
Username:
Password:
Example
PC name:192.168.0.1
User name:administrtor
Passsword:123456
将业务转换成SQL
sum group by
DROP TABLE IF EXISTS `coins_tbl`;
CREATE TABLE IF NOT EXISTS `coins_tbl` (
coin_id INT NOT NULL AUTO_INCREMENT,
coin_symbol VARCHAR(40) NOT NULL,
coin_price DECIMAL(16,8) NOT NULL,
last_change_date DATE,
PRIMARY KEY ( coin_id )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `coins_tbl`
(coin_symbol,coin_price,last_change_date)
VALUES
('BTC',645.998,NOW());
INSERT INTO `coins_tbl`
(coin_symbol,coin_price,last_change_date)
VALUES
('BTC',615.998,DATE_SUB(NOW(), INTERVAL 1 DAY));
INSERT INTO `coins_tbl`
(coin_symbol,coin_price,last_change_date)
VALUES
('ETH',177.95,NOW());
INSERT INTO `coins_tbl`
(coin_symbol,coin_price,last_change_date)
VALUES
('EOS',4.5486,NOW());
INSERT INTO `coins_tbl`
(coin_symbol,coin_price,last_change_date)
VALUES
('EOS',3.007,DATE_SUB(NOW(), INTERVAL 1 DAY));
INSERT INTO `coins_tbl`
(coin_symbol,coin_price,last_change_date)
VALUES
('BNB',7.823,NOW());
select coin_symbol,count(coin_symbol) as count,avg(coin_price) as avg_price
from coins_tbl
group by coin_symbol;
coin_symbol count avg_price
BTC 4 638.498
ETH 1 177.95
EOS 2 3.7778
BNB 1 7.823
one row to multi column
DROP TABLE IF EXISTS `id_card_tbl`;
CREATE TABLE IF NOT EXISTS `id_card_tbl` (
`id` INT NOT NULL AUTO_INCREMENT,
`id_number` varchar(150) NOT NULL,
`user_name` varchar(150) NOT NULL
PRIMARY KEY ( coin_id )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `id_card_tbl`
(id_number,user_name)
VALUES
('320722199105014823,320722199105014824,','张三,李四');
INSERT INTO `id_card_tbl`
(id_number,user_name)
VALUES
('320722199105014823','王五');
id_number user_name
320722199105014823,320722199105014824, 张三,李四
320722199105014823 王五
select
SUBSTRING_INDEX(SUBSTRING_INDEX(id_card_tbl.`id_number`, ',', numbers.n), ',', -1) `id_number`,
SUBSTRING_INDEX(SUBSTRING_INDEX(id_card_tbl.`user_name`, ',', numbers.n), ',', -1) `user_name`
from (
select 1 n union all select 2
) numbers
INNER JOIN `id_card_tbl` on CHAR_LENGTH(id_card_tbl.`id_number`)
-CHAR_LENGTH(REPLACE(id_card_tbl.`id_number`, ',', ''))>=numbers.n-1;
id_number user_name
320722199105014823 张三
320722199105014824 李四
320722199105014823 王五
regular place
-- 中国身份证
mysql> select REGEXP_REPLACE('王大炮,320722199101020304','[\u0391-\uFFE5]{18,}','$0,');
王大炮,320722199101020304,
-- 香港身份证
mysql> select REGEXP_REPLACE('王大炮,H123456(2)','[A-Z]{1,2}[0-9]{6}\\([0-9A]\\)','$0,');
王大炮,H123456(2),
-- 去除中文字符
mysql> select REGEXP_REPLACE('王大炮,H123456(2)','[^\x00-\xff]','');
H1234562
网友评论