取数
select * from 数据库.表名
select 列名,列名 from 数据库.表名
限制100条数据:select * from 数据库.表名 limit 100
按顺序排列 中文升降序没有显著区分:select * from 数据库.表名 orderby 列名 (desc降序)
排序&限制:select * from 数据库.表名 orderby 列名 limit 100
按数字筛选:select * from 数据库.表名 where 列名=数字
按文本筛选:select * from 数据库.表名 where 列名=“文本”
数字范围内提取:select * from 数据库.表名 where 列名 in (1,2)
文本范围内提取:select * from 数据库.表名 where 列名 in ('文本1 ','文本2 ')
表达否定:!= <> not in ()
多条件提取:select * from 数据库.表名 where 列名1=' ' and/or 列名2=' ' and/or 列名3 in ()
多重嵌套条件提取:and优先执行 加括号
模糊查找:包含'a' select * from 数据库.表名 like '%a%'
以'a'为开头 select * from 数据库.表名 like 'a%'
以'a'为结尾 select * from 数据库.表名 like '%a'
分组:select * from 数据库.表名 group by 列名
计数 select 列名,count(按什么进行计数) from 数据库.表名 group by 列名
去重 select 列名,count(distinct 按什么进行计数) from 数据库.表名 group by 列名
对分组后的结果进行过滤 select * from 数据库.表名 group by 列名 having count(列名) >= 100 可在后面and进行多重过滤
select * from 数据库.表名 where 列名 like '%a' group by 列名 having count(列名2) >10
嵌套if 等于select * from 数据库.表名 group by 列名 having count( if (列名 like '%a%',1,null) ) >10 对返回1,错返回null
利用count算百分比:先用count分别取出 再相除
select
city,
count(1),
count(if(industryField like '%电子商务%',industryField,null)),
count(if(industryField like '%电子商务%',industryField,null)) / count(1)
from data.dataanalyst
group by city
可以用as别名化 以便在后面调用 只能在where groupby层面使用
select
city,
count(1) as total,
count(if(industryField like '%电子商务%',industryField,null)) as emarket,
count(if(industryField like '%电子商务%',industryField,null)) / count(1)
from data.dataanalyst
group by city
having emarket >= 10
order by emarket
函数
截取左边的第一个字符:select left(列名,1) from 数据库.表名 同right
找到某字符所在位置:select left(列名,1),locate('k',列名,从哪个位置开始查找) from 数据库.表名
字符串长度:length
子字符串:substr(列名,从哪里开始,截取长度)
子查询
在select外嵌套select:select * from (select * from data.a) as t
分组&命名:顺序计算
select
case
when mean <=10 then '0-10'
when mean <=20 then '10-20'
when mean <=30 then '20-30'
else '30+'
end,
列名 from (select * from data.a) as t
过滤:select * from data.a where 列名 in (select 列名 from data.a groupby city having count(p) >100)
join
关联:select * from data.表1 join as d data.表2 as c on d.列名 = c.列名(on表示两者关联)
加载
数据过大 可以使用命令行加载数据
时间
now() year() month() week() date() ...
格式转换:date_format(time,'%Y-%m')
加天数:date_add()
天数相减:date_sub()