python 1hour的汇总1

思路:
1、需要汇总的数据有:
在这里插入图片描述
2、考虑需要对多个维度进行groupby
(1)groupby用法:
极客学院
(2)对多个类别进行groupby:
https://segmentfault.com/a/1190000006821331
上面SQL的意思是,对Subject_Selection表中的数据进行分组,将具有相同Subject和Semester字段值的记录放到同一个分组里去, 然后对每个分组中的数据应用聚合函数(COUNT,SUM, AVG,etc)。
3、两张表的汇总数据合并:UNION

如果select两次,我们可以把两次的搜索结果进行合并,规则:
a. Union必须由两条或者两条以上的SELECT语句组成,语句之间使用Union链接。

b. Union中的每个查询必须包含相同的列、表达式或者聚合函数,他们出现的顺序可以不一致(这里指查询字段相同,表不一定一样)

c. 列的数据类型必须兼容,兼容的含义是必须是数据库可以隐含的转换他们的类型
(1) 不重复合并:Union会帮忙合并重复的数据,返回时直接删除重复的数据
允许重复合并:使用Union All取消自动合并
结果排序
使用Union组合查询时,只能使用一条order by子句对结果集进行排序,而且必须出现在最后一条出现的SELECT语句之后。因为`Union不允许对于部分结果集进行排序,只能针对最终检索出来的结果集进行排序。

注意:由于在多表组合查询时候,可能表字段并不相同。所以,在对于结果集排序的时候需要使用检索出来的共同字段。

(select user_id,user_nickname,user_status from yy_user where user_status = 1)
UNION ALL
(select user_id,user_nickname,user_status from yy_user where user_id > 3)
order by user_id desc
上面检索的字段user_id必须存在于结果集中。

多表组合查询
大型项目中数据经常分布在不同的表,检索的时候需要组合查询出来。多表查询的时候,并不要求两个表完全相同,只需要你检索的字段结构相似就可以。

我们已经有一张user表,假设搜索时候我们需要将用户昵称和博客文章标题一同混合检索。

图片描述

看下上面的posts表,posts_name和user_nickname类型相同,而posts_id和user_id类型相同,post_status和user_status类型相同。尽管他们的名称不相同。

我们可以这么来检索:

select posts_id,posts_name,posts_status from yy_posts
UNION
select user_id,user_nickname,user_status from yy_user
图片描述

从上面的检索结果能看出,我们将两个表的数据组合了起来。Union检索遇到不一致的字段名称时候,会使用第一条SELECT的查询字段名称,或者你使用别名来改变查询字段名称。

区分多表
上一个例子中,我们组合查询了user表和posts表。虽然结果混合在一起没有任何问题,但是当显示到页面的时候,我们需要给用户和文章不同的链接或者其他的区分。所以我们必须确定该条记录来自于哪张表,我们可以添加一个别名来作为表名。

select posts_id,posts_name,posts_status,‘users’ as table_name from yy_posts
UNION
select user_id,user_nickname,user_status,‘posts’ as table_name from yy_user
图片描述

注意SQL语句中的’users’ as table_name。对应的是图片里的table_name,就是我们刚刚添加用于区别表的字段。
以上内容来自:https://segmentfault.com/a/1190000007926959

4、设置时间区间:
获取当前时间:

import datetime

now = datetime.datetime.now()

前一个小时:

# 前一小时
d1 = now - datetime.timedelta(hours=1)

4、对于表一

(1)trans_count:计算在时间段内的总数,存放在trans_count变量中
sql语言:(select count(* ), ‘pgc’ as pgc/ugc
from pgc
WHERE end_time<=now AND d1 <= end_time
GROUPBY imageversion )
UNION ALL
(select count(* ), ‘ugc’ as pgc/ugc
from ugc
WHERE end_time<=now AND d1 <= end_time
GROUPBY imageversion
)

(2)succ_rate: 计算count(suc)/trans_count,存放在succ_rate变量中
sql 语言: (select count(* ), ‘pgc’ as pgc/ugc
from pgc
WHERE end_time<=now AND d1 <= end_time
GROUPBY imageversion )
UNION ALL
(select count(* ), ‘ugc’ as pgc/ugc
from ugc
WHERE end_time<=now AND d1 <= end_time
GROUPBY imageversion
)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值