作者归档:trick

SQL数据分析杂货铺

查询整个数据库含某个列的语句:
SELECT *
FROM
INFORMATION_SCHEMA.COLUMNS
WHERE
COLUMN_NAME = ‘level’

查询数据库所有表的注释:
SELECT TABLE_NAME,TABLE_COMMENT FROM information_schema.TABLES WHERE table_schema=’mammothcode’;

查询所有表下的所有字段的注释:
SELECT t.TABLE_NAME,t.TABLE_COMMENT,c.COLUMN_NAME,c.COLUMN_COMMENT FROM information_schema.TABLES t,INFORMATION_SCHEMA.Columns c WHERE c.TABLE_NAME=t.TABLE_NAME AND t.TABLE_SCHEMA=’newsql’

查询表某列字段的总和:
SELECT SUM(amount) FROM xl_withdraw_record

按时间分组查询:

select month(FROM_UNIXTIME(time)) from table_name group by month(FROM_UNIXTIME(time))

1、按月分组:
select month(FROM_UNIXTIME(time)) from table_name group by month(FROM_UNIXTIME(time))
2、按年月分组:
select DATE_FORMAT(FROM_UNIXTIME(time),”%Y-%m”) from tcm_fund_list group by DATE_FORMAT(FROM_UNIXTIME(time),”%Y-%m”)
或者:
select FROM_UNIXTIME(time,”%Y-%m”) from tcm_fund_list group by FROM_UNIXTIME(time,”%Y-%m”)
3、按年月日分组:
select DATE_FORMAT(FROM_UNIXTIME(time),”%Y-%m-%d”) from tcm_fund_list group by DATE_FORMAT(FROM_UNIXTIME(time),”%Y-%m-%d”)
或者:
select FROM_UNIXTIME(time,”%Y-%m-%d”) from tcm_fund_list group by FROM_UNIXTIME(time,”%Y-%m-%d”)
其中FROM_UNIXTIME(time,”%Y-%m-%d”)中的time代表UNIX时间戳的字段名称

数据分析SQL查询入门笔记

现在SQL已经作为数据分析这门学科的必备技能,所以学习SQL也提上了议程,下面就是我作为笔记简单的记录了一些数据分析这门学习需要的一些基本SQL语句。

语法格式

在SQL语句中,是不区分大小写的,比如下面的三段代码都是能够得到相同用的结果。

SELECT id,total

select id,total

SelEcT id,total

虽然上面的代码是可以正常运行,但是很容易引起歧义,所以一般命令大写,其他代码片段小写,比如下面这样

SELECT id,total

一般在一条语句后面我们可以添加上分号;以表示这一条语句结束,这样的好处是在多条查询的时候可以减少错误,如果是在单条语句查询的时候可以不用写分号

SELECT和FROM语句

SELECT是SQL查询中最基本的语句,基本上很多语句都从它开始,SELECT在SQL中一般用于选择哪些数据并拿出来展示,比如下面选择了idtotal两个列。

SELECT id,total

FROM语句和SELECT结合,用于用哪个表中选择数据,比如下面的语句就从blog表查询并只选择了idtotal两列数据。

SELECT id,total FROM blog

继续阅读

Python生成器

什么是生成器(generator)?

在Python中提供了一种名为generator的对象,他是通过next函数去中断执行并且generator对象具有Iterable对象,也就是说可以用于for循环,generator最大的作用是按需生成值,这个是什么意思呢?当我们需要一组元素很多的列表的时候会占用很大的内存,比如你需要生成一组从0-100000的列表,那么这个列表的长度将有10万,这是多么大的列表?如果比这个数值更大呢?那么很大一部分内存都将用来保存这个列表。

list(range(100000))

类似于上面这样的情况,我们可以用generator对象来按需生成数值来供我们处理,你可以把generator对象理解为一种状态机,里面保存着每次执行后的状态而并不是一次性的生成所有的值,我们就相当于导演,generator对象就像一个演员,我们叫他cut的时候,他就会停止,这样的好处就是一次性只返回一个或少量的值,不会一次性大量生成所有的值而导致内存的紧缺。

生成器(generator)函数

生成器函数和普通函数很相似,为什么?因为你看见一个函数内部只要出现yield标识符,那么这个函数肯定就是generator对象函数,比如下面的代码:

#普通函数
def ad(a,b):
    return a + b

#generator函数
def ad(a,b):
    yield a + b
    return None

但是他们的执行过程却不一样,普通函数调用过后就马上执行内部的代码并返回,而generator对象函数却是保存了内部的状态,等待你需要的时候再去执行,而执行我们通过next函数去调用并且在内部执行的时候遇见了下一个yield标识符就会停止执行并返回yield标识符后面的值。

#普通函数
def ad(a,b):
    return a + b

#generator函数
def ad(a,b):
    yield a + b
    return None


#普通函数执行
ad(1,5)
#6

b = ad(1,5)
#此时保存了状态

next(b)
#6 通过next函数调用generator函数执行

继续阅读

Python 列表生成表达式

如何生成列表?

先试想一下,如果你需要生成1-50的数值列表,如果没有列表生成式你将会这样来做:

x = []
i = 1
while i <= 50:
    x.append(i)
    i += 1

还有一种方法就是通过range函数生成整数数列,然后通过list函数生成一个列表返回,大概操作如下:

list(range(0,50))

当然range函数提供了第三个参数,用于设置步数,你可以理解为间隔数,比如我只需要返回0-50中的偶尔,那么我用range生成的数列需要每隔两个数生成一个:

list(range(0,50,2))

继续阅读

Python函数参数

位置参数

位置参数是指定了多少参数,就必须输入多少参数,否则就会报错。也可以把位置参数理解为必须参数,如果没有输入同等的参数,就会报错,比如下面的代码,计算两个数的乘积。

def power(x,y):
    return x * y


power(2,5)
# 10

power(2)
#报错

默认参数

默认参数指的是可以给一个参数设置一个默认值,如果用户没有输入这个参数,那么在函数内部就会用这个参数设置的默认值进行计算,比如说下面的函数是返回两个数的乘积,如果用户没有输入第二个数,就默认为数值’2’。

def power(x,y=2):
    return x * y


power(2,5)
# 10

power(2)
# 4

继续阅读