设为首页 收藏本站
查看: 1015|回复: 0

[经验分享] 工作中的一个SQL查询总结

[复制链接]

尚未签到

发表于 2016-11-12 07:54:34 | 显示全部楼层 |阅读模式
前一段时间的工作中有一项是计算实时统计结果并生成相应的数据表(主要是算产品PV,UV的环比什么的)。
所谓实时统计,就是终端请求Server接口时把相应数据写进日志,然后使用Python分析日志程序,将各统计项整理成各自的文件。再将这些整理好的文件定时发送到解析文件接口中解析并入库。最后写SQL计算统计结果。
顺便提一句,我们用的是MySQL,单库千万量级以下的数据都没问题。例如每天往表里写2w数据,则10000000/20000 = 500天内不需要优化。
回到正题,下面是这个SQL中使用到的一些技巧(SQL实在太长就不贴了):
1.select子句中的条件查询:
(CASE
WHEN sd.type=1 THEN (select a.title from db1.apk a where a.id=sd.materialId)
WHEN sd.type=2 THEN (select d.title from db1.ad d where d.id=sd.materialId)
WHEN sd.type=3 THEN (select w.title from db1.wallpaper w where w.id=sd.materialId)
END) as title,
原来也知道在SQL中可以写条件查询,但是没用过,这次用了一下,就是CASE...WHEN...THEN...[ELSE] ...END...
2.多库join查询:
说实话,这个原来确实没听说过(不知道其它数据库如Oracle什么的是不是也有这个功能).上网查了一下才发现的,自己试一试果然没问题。所谓多库join就是不同数据库中的表进行关联查询。
解决方法:在MySQL中其实很简单,就是查询时在表名前加上数据库名就行啦:)
例如上面的sql语句,db1是一个库中的表,将其查询结果作为db2表中的查询列(当然做join等操作也是没问题的)。
3.相关子查询:
SELECT
sd.statTime,sd.type,sd.materialId,sd.pv,sd.token, 
(select SUM(totalpvtab.pv) from statdetail totalpvtab where totalpvtab.statTime=sd.statTime and totalpvtab.materialId=sd.materialId and totalpvtab.type=sd.type) totalpv,
FROM ....
就是将外层查询的列作为子查询的查询条件了。
4.SQL函数:
还用到一些SQL函数如:
DATEDIFF(sd.statTime,a.createdTime)  --  计算两个日期天数差,
ABS(X) -- 取X绝对值,
等等。
先写到这里吧,明天继续。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-299087-1-1.html 上篇帖子: sql2000存储过程生成sql 插入语句 下篇帖子: 如何将mysql5的sql文件导入到mysql4?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表