Mysql 数据统计学习积累

一、关键词展现统计
1.1 本周每日展现与上周每日展现 折线图
1.2 本周车系 展现量TOP10 柱状图
1.3 关键词覆盖-展现分析,新增加的关键词展现数据与之前展现数据对比 柱状图
 
二、关键词点击统计?
2.1 本周每日点击与上周每日点击 折线图
2.2 本周车系 点击量TOP10 柱状图
2.3 本周每日点击率与上周每日点击率 折线图
 
三、关键词转化统计
3.1 本周每日申请试驾报名数量 柱状图
3.2 本周车系申请试驾排名 柱状图
 
四、数据总结
4.1 百度指数TOP50总占比,TOP50关键词各占比
4.2 百度指数本周与上周变化较大的几个车系关键词 (百度指数差-排序) ?百度指数差,上升和下降的前10名
4.3 同行竞品分析-分析与同行厂商,车系的变化细节
 
五、小结
上周与本周的平均展现,点击,点击率,转化率对比上升或者下降幅度,每月,季度等数据变化。
 
以下是涉及数据库相关操作语句:
关键词规则
1.带空格,去掉空格
2.带括号(),去掉括号内所有内容,比如(进口)、(概念车)、(海外)
3.带? 去掉 ? 符号
4. 大小写转换;
5.去掉“浙江”
6. +*厢
7.特殊符号 “ α”
整理常用SQL语句

A、正则批量替换

UPDATE `think_key` SET `otherkey` = replace(keyname,’α’,”) WHERE `keyname` LIKE ‘%浙江%’
UPDATE `think_key` SET `otherkey` = replace(keyname,’两厢’,”) WHERE `keyname` LIKE ‘%两厢%’
UPDATE `think_key` SET `otherkey` = replace(keyname,’三厢’,”) WHERE `keyname` LIKE ‘%三厢%’
UPDATE `think_key` SET `otherkey` = replace(keyname,’α’,”) WHERE `keyname` LIKE ‘%α%’
B、根据条件修改记录

//关键词与副关键词相等的记录(keyname=otherkey)则设置keyzhishu,oldkeyzhishu,solu,otherkey为0,即清空
操作。
create table tmp as select keyname from think_key where 1;
update `think_key` set keyzhishu = ‘0’ , oldkeyzhishu = ‘0’ , solu = ‘0’ , otherkey = ” WHERE otherkey
in (select keyname from tmp where 1);
drop table tmp;
C、查看展现量与点击量SQL

//==查看每日展现与点击量sql
SELECT sum(click) FROM `cms_360_api_data` WHERE `days` = ‘2014-06-30’ ORDER BY `searchvol` DESC

//查看一周展现与点击
SELECT sum(searchvol) FROM `cms_360_api_data` WHERE `days` >= ‘2014-07-04’ and `days` <= ‘2014-07-10’

//车系收录量最高的,一共65个。
SELECT * FROM `think_key` where keyname in (SELECT keychexi FROM `think_access`) and solu = ‘100000000’
ORDER BY `keyzhishu` DESC
//每周车系前10名按展现和点击分组排序。。。。
SELECT keyword,sum(searchvol),sum(click) FROM `cms_360_api_data` WHERE keyword in (SELECT keychexi FROM
`think_access`) and days >=’2014-6-30′ and days<=’2014-7-6′ group by keyword ORDER BY sum(searchvol)
DESC limit 10

1.每周车系展现排行榜
SELECT keyword,sum(searchvol) FROM `cms_360_api_data` WHERE keyword in (SELECT keychexi FROM
`think_access`) and days >=’2014-6-30′
and days<=’2014-7-6′ group by keyword ORDER BY sum(searchvol) DESC limit 10
2.每周车系点击排行榜
SELECT keyword,sum(click) FROM `cms_360_api_data` WHERE keyword in (SELECT keychexi FROM `think_access`)
and days >=’2014-6-30′ and days<=’2014-7-6′ group by keyword ORDER BY sum(click) DESC limit 10
D、异常数据sql

// == 点击大于检索 非正常关键词
SELECT * FROM `cms_360_api_data` WHERE `click` > `searchvol` and days = ‘2014-07-06’ ORDER BY
`searchvol` DESC
E、百度指数sql

//查询车系关键词 百度指数
SELECT * FROM `think_key` WHERE keyname in (SELECT keychexi FROM `think_access` WHERE 1) ORDER BY
`keyzhishu` DESC

//查询车系中otherkey不为空的记录
SELECT * FROM `think_key` where otherkey != “” ORDER BY `keyzhishu` DESC
SELECT * FROM `think_key` WHERE keyname in (SELECT keychexi FROM `think_access`) and otherkey != “”
ORDER BY `keyzhishu` DESC

//Top50
select sum(keyzhishu) from (SELECT keyzhishu FROM `think_key` WHERE keyname in (SELECT keychexi FROM
`think_access`) ORDER BY `think_key`.`keyzhishu` DESC LIMIT 0,50) as t1

//Top50关键词各占百分比
SELECT keyname,otherkey,keyzhishu/606936 FROM `think_key` WHERE keyname in (SELECT keychexi FROM
`think_access`) ORDER BY `think_key`.`keyzhishu` DESC LIMIT 0,50
F、试驾报名

//统计每日试驾报名

//统计车系试驾报名排行榜 — 返回指定日期 预约试驾报名 前 15个车系。
select chexi , count(*) AS count from think_baoming where data between ‘2014-07-04’ and ‘2014-07-11’
group by chexi order by count DESC limit 15

 

G、数据总结

//小结 统计周每日 检索 或展现 周平均值。
SELECT sum(searchvol)/7 FROM `cms_360_api_data` WHERE `days` >= ‘2014-06-26’ and `days` <= ‘2014-07-03’

 

I、其他.
//==查询主关键词和次关键词总和 排序。。。
SELECT k.p_id , k.keywords , c.keyword , sum(c.searchvol) , sum(c.click) , c.days FROM
`cms_360_api_data` as c LEFT JOIN keywords as k ON c.keyword = k.keywords where c.days=’2014-07-06′
group by k.p_id ORDER BY sum(c.searchvol) DESC
//一周数据
SELECT k.p_id , k.keywords , c.keyword , sum(c.searchvol) , sum(c.click) , c.days FROM
`cms_360_api_data` as c LEFT JOIN keywords as k ON c.keyword = k.keywords where c.days>=’2014-6-30′ and
c.days<=’2014-7-6′ group by k.p_id ORDER BY sum(c.searchvol) DESC
//点击比动较大的上周与本周 点击差值。
select c1.keyword , c2.click – c1.click from (SELECT keyword , click FROM `cms_360_api_data` WHERE days
= ‘2014-07-07’) as c1 left join (SELECT keyword , click FROM `cms_360_api_data` WHERE days = ‘2014-07-
14’) as c2 on c1.keyword = c2.keyword ORDER BY `c2.click – c1.click` DESC
—-
select c1.keyword , c1.click as click1 , c2.click as click2 ,c2.click – c1.click as click3 from (SELECT
keyword , click FROM `cms_360_api_data` WHERE days = ‘2014-07-07’) as c1 left join (SELECT keyword ,
click FROM `cms_360_api_data` WHERE days = ‘2014-07-14′) as c2 on c1.keyword = c2.keyword ORDER BY
`click3` DESC

//百度指数添加历史记录
INSERT INTO think_tongji (id,data,keyname,otherkey,keyzhishu,solu) SELECT null,’2014-08-
08′,keyname,otherkey,keyzhishu,solu FROM think_key;

//查询360关键词指数排名TOP50
select sum(k.week_index) as data from (SELECT week_index FROM think_360key WHERE keyname in (SELECT
keychexi FROM think_access) and date='{$benzhou}’ ORDER BY week_index DESC LIMIT 50) as k
//计算360关键词指数TOP50各占百分比
SELECT keyname,round(week_index/’197354’*100,0) as bfb FROM think_360key WHERE keyname in (SELECT
keychexi FROM think_access) and date=’2014-08-07′ ORDER BY week_index DESC LIMIT 50
//对于value-sql
SELECT keyname,round(week_index/'{$count}’*100,0) as bfb FROM `think_360key` WHERE keyname in (SELECT
keychexi FROM `think_access`) and date='{$benzhou}’ ORDER BY week_index DESC LIMIT 50
 
===========================搜索引擎品牌专区栏目数据汇总==========================

MySQL SQL 语法总结

1、建表格:?
create table table_name(
column1 datatype [not null] [not null primary key],
column2 datatype [not null],
…);
说明:
datatype –是资料的格式,详见表。
nut null –可不可以允许资料有空的(尚未有资料填入)。
primary key –是本表的主键。

2、更改表格 
alter table table_name
add column column_name datatype
说明:增加一个栏位(没有删除某个栏位的语法。
alter table table_name
add primary key (column_name)
说明:更改表得的定义把某个栏位设为主键。
alter table table_name
drop primary key (column_name)
说明:把主键的定义删除。

3、建立索引
create index index_name on table_name (column_name)
说明:对某个表格的栏位建立索引以增加查询时的速度。

4、删除 ?
drop table_name
drop index_name

5、数据类型 datatypes?
smallint
16 位元的整数。
interger
32 位元的整数。
decimal(p,s)
p 精确值和 s 大小的十进位整数,精确值p是指全部有几个数(digits)大小值,s是指小数点后有几位数。如果没有特别指定,则系统会设为 p=5;

s=0 。
float
32位元的实数。
double
64位元的实数。
char(n)
n 长度的字串,n不能超过 254。
varchar(n)
长度不固定且其最大长度为 n 的字串,n不能超过 4000。
graphic(n)
和 char(n) 一样,不过其单位是两个字元 double-bytes, n不能超过127。这个形态是为了支援两个字元长度的字体,例如中文字。
vargraphic(n)
可变长度且其最大长度为 n 的双字元字串,n不能超过 2000。
date
包含了 年份、月份、日期。
time
包含了 小时、分钟、秒。
timestamp
包含了 年、月、日、时、分、秒、千分之一秒。

6、数据库DML(data manipulation language)?
●增加资料:
insert into table_name (column1,column2,…)
values ( value1,value2, …)
说明:
1.若没有指定column 系统则会按表格内的栏位顺序填入资料。
2.栏位的资料形态和所填入的资料必须吻合。
3.table_name 也可以是景观 view_name。

insert into table_name (column1,column2,…)
select columnx,columny,… from another_table
说明:也可以经过一个子查询(subquery)把别的表格的资料填入。

●查询资料:
基本查询
select column1,columns2,…
from table_name
说明:把table_name 的特定栏位资料全部列出来
select * from table_name
where column1 = xxx
[and column2 > yyy] [or column3 <> zzz]
说明:
1.’*’表示全部的栏位都列出来。
2.where 之後是接条件式,把符合条件的资料列出来。

select column1,column2
from table_name
order by column2 [desc]
说明:order by 是指定以某个栏位做排序,[desc]是指从大到小排列,若没有指明,则是从小到大排列

●组合查询
组合查询是指所查询得资料来源并不只有单一的表格,而是联合一个以上的表格才能够得到结果的。
select *
from table1,table2
where table1.colum1=table2.column1
说明:
1.查询两个表格中其中 column1 值相同的资料。
2.当然两个表格相互比较的栏位,其资料形态必须相同。
3.一个复杂的查询其动用到的表格可能会很多个。

●整合性的查询:
select count (*)
from table_name
where column_name = xxx
说明:
查询符合条件的资料共有几笔。
select sum(column1)
from table_name
说明:
1.计算出总和,所选的栏位必须是可数的数字形态。
2.除此以外还有 avg() 是计算平均、max()、min()计算最大最小值的整合性查询。
select column1,avg(column2)
from table_name
group by column1
having avg(column2) > xxx
说明:
1.group by: 以column1 为一组计算 column2 的平均值必须和 avg、sum等整合性查询的关键字
一起使用。
2.having : 必须和 group by 一起使用作为整合性的限制。

●复合性的查询
select *
from table_name1
where exists (
select *
from table_name2
where conditions )
说明:
1.where 的 conditions 可以是另外一个的 query。
2.exists 在此是指存在与否。
select *
from table_name1
where column1 in (
select column1
from table_name2
where conditions )
说明:
1. in 後面接的是一个集合,表示column1 存在集合里面。
2. select 出来的资料形态必须符合 column1。

●其他查询
select *
from table_name1
where column1 like ‘x%’
说明:like 必须和後面的’x%’ 相呼应表示以 x为开头的字串。
select *
from table_name1
where column1 in (‘xxx’,’yyy’,..)
说明:in 後面接的是一个集合,表示column1 存在集合里面。
select *
from table_name1
where column1 between xx and yy
说明:between 表示 column1 的值介於 xx 和 yy 之间。

7、更改资料:?
update table_name
set column1=’xxx’
where conditoins
说明:
1.更改某个栏位设定其值为’xxx’。
2.conditions 是所要符合的条件、若没有 where 则整个 table 的那个栏位都会全部被更改。

8、删除资料:?
delete from table_name
where conditions
说明:删除符合条件的资料。

说明:关于where条件后面如果包含有日期的比较,不同数据库有不同的表达式。具体如下:
(1)如果是access数据库,则为:where mydate>#2000-01-01#
(2)如果是oracle数据库,则为:where mydate>cast(‘2000-01-01’ as date)
或:where mydate>to_date(‘2000-01-01′,’yyyy-mm-dd’)
在delphi中写成:
thedate=’2000-01-01′;
query1.sql.add(‘select * from abc where mydate>cast(‘+””+thedate+””+’ as date)’);

如果比较日期时间型,则为:
where mydatetime>to_date(‘2000-01-01 10:00:01′,’yyyy-mm-dd hh24:mi:ss’);
 

MySql错误No database selected

今天学习ThinkPHP中看到一段测试代码,执行一直是错误,好多,代码如下:
CREATE TABLE `think_demo` (
`id` int(11) unsigned NOT NULL auto_increment,
`title` varchar(255) NOT NULL default ”,
`content` longtext NOT NULL,
PRIMARY KEY? (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;

然后我就只执行第一句:CREATE TABLE `think_demo`
还是错误,应该不是代码问题了,那就是我执行代码的问题了,操作有错误,用的PHPmyadmin,没错的。
然后执行上面一句代码,查看错误信息提示:No database selected
原因是没有选择数据库,选择一个数据库问题就解决了。
<a style=”color: red;” href=”http://www.0535code.com/”>www.0535code.com</a> 我的学习博客欢迎大家一起学习哦,最近业余学习ThinkPHP框架中。。。