函数使用
1.count用法
count是一个聚合函数,用来表示表中行的数量(一定是统计行的数量,而不是统计列,但是这个函数的传参是列名)。 对于参数,如果传* 或者1,那么就是统计所有行。如果有具体的列名,那么就需要剔除该列下中列值为null的行。
count()函数的使用示例如下:
- 计算student表中的所有行数: select count(*) from student; 结果为6,表示表中有6行数据。
- 计算student表中age字段值大于等于20的行数: select count(*) from student where age >= 20; 结果为4,表示满足条件的行数为4。
- 计算student表中name字段值不为空的行数:select count(name) from student; 结果为5,表示满足条件的行数为5。
- select count(DISTINCT(name)) from student,表示统计student表中name字段:先进行去重,然后再进行去null,最后统计。
总结:count函数就是统计name字段中有多少行,其中区别在于是否需要去 null / 去重 / 全部 。
select * from( select * from 表名) 是什么意思
- 括号内的结果集对于外面叫做派生表 这种查询一般是要对括号内的查询结果集再进行筛选及操作
- select * from( select * from 表名)简单,看似无用,一般里面写的都很复杂,多表联合、分组等等
- 哪里有分组,order by是排序,case when 是选择语句,可以根据选择条件筛选取值
总结:select * from( select * from 表名) 里面的select * from 表名 工作中一般都是写很复杂的 多表联合查询,分组查询,order by 排序 case when 是选择语句,可以根据选择条件筛选取值。 外面的select * from 是查询出 里面已经查询 按照条件筛选好的数据
SLS日志中计算MySQL环比
我们知道,在前端统计数据中,我们在统计pv,uv的时候,不仅仅希望得到的是孤立的、静止的数据,更希望得到一个动态的、全面的数据。那么计算对应的pv、uv、js错误数量的展示就很能做好预测工作,因此通过Mysql自动计算出环比,就显得十分方便。
* |
SELECT
compare(PV, 86400)
FROM (
SELECT
count(*) AS PV
FROM log
)
其中compare(x, window_time),这里有两个参数:pv和window_time。我们先看pv,因为我们要算的环比对象就是pv,那么我们假设我们需要计算的是:在最近一个小时内,pv的环比增长率。
那么对应的计算公式是:
【当前一个小时时间内的pv访问总量(今天) - 过去一个小时时间内的pv访问总量(昨天)】 除以 过去一个小时时间内的pv访问总量(昨天)
那么有人会问,这里的sql中 count( * ) from pv,拿到的pv表,你怎么知道是今天一天的时间段,还是今天一个小时时间段,又或者昨天一个小时时间段对应的表呢?如下所示:
我们在上面选择框中是可以选择时间段的,那么我们选择了哪个时间段,我们的select查询就是查询这个时间段的表。因此,内部嵌套的select拿的是“最近一个小时”的。那么我们怎么去拿相隔“一天 = 24小时”前的对应一小时内数据呢?就是通过compare函数中的【第二个参数: window_time】。这里的86400s就是要“减去”的时间间隔,就是在当下时间 - 86400s,得到前一天对应的当下时间段,然后执行pv的count查询。
* |
SELECT
compare(PV, 86400)
// 就是将下面pv 的 count统计,分别在当下一小时内和 减去86400s的昨天都统计一遍。
FROM (
SELECT
count(*) AS PV
FROM log
)
返回值为一个数组:【3337 ,3522,0.947473026689381 】,其中前两个元素分别表示当下和昨天一小时内具体的pv数值,第三个就是统计的环比值。 我们可以将得到的result数组,都展示在看板中:
* |
SLECT
diff[0] AS "today" // 今天一个小时内的pv值
diff[1] AS "yesterday" // 昨天相同时间段一小时内的pv值
diff[2] AS "环比增长率" // 中文的字符串需要加双引号
FROM (
// 就是将下面pv 的 count统计,分别在当下一小时内和 减去86400s的昨天都统计一遍。
// 得到的结果是:【3337 ,3522,0.947473026689381】
SELECT
compare(PV, 86400) AS diff // 将这个结果 AS 作为“diff”表示为compare函数计算结果的别名
FROM (
SELECT
count(*) AS PV
FROM log
)
)
SLS环比计算方式,参考文献:www.alibabacloud.com/help/zh/sls…