MariaDB社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3887|回复: 2
打印 上一主题 下一主题

求sql查询统计数据,实在想不出来,没辙了.

[复制链接]
跳转到指定楼层
1#
发表于 2007-11-6 15:46:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
求sql查询,环境:mysql
数据库:
id                       插入时间                   通话类型           电话号码   
1             2007-11-01   09:00:00       拨入                 2569854
2             2007-11-01   14:00:00       拨入                 13599945126
3             2007-11-01   20:00:00       拨入                 12365458748
4             2007-11-02   08:00:00       拨出                 0282654879(长途)
5             2007-11-02   15:00:00       拨出                 05924589652(长途)
6             2007-11-03   21:00:00       拨入                 2458965
7             2007-12-01   11:00:00       拨入                 0235987456(长途)   
8
条件:查询2007-11-01到2007-12-01之间的电话量.
显示格式如下:
时间                 总通话量     拨入电话    拨出电话   长途电话总量   长途电话拨入量   长途电话拨出量
2007-11-01             3          3          0          0          0          0            
2007-11-02             2          0          2          2          0          2           
2007-11-03             1          1          0          0          0          0      
2007-12-01             1          1          0          1          1          0      
如果按照一般方法看起来就要查询很多次数据库,请问各位有没有   sql   语句能使查询,显示出来方便很多呢?



版主批注:帖子名称由 “实在想不出来,没辙了.” 改成了“求sql查询统计数据,实在想不出来,没辙了. ”
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖 顶 踩
2#
发表于 2007-11-6 16:20:44 | 只看该作者
这个问题确实对MySQL来说比较头疼,如果是其他数据库就方便多了,你可以先参考一下思路:
使用CUBE和ROLLUP对数据进行汇总
http://database.ctocio.com.cn/tips/88/7625588.shtml

而在MySQL中没有这种东西,就需要做更多的工作了。试试用编程和建一些中间表过度等...

在你的具体问题中,有些东西是重复统计,如拨入电话 、长途电话拨入量、长途电话总量,这种统计报表是不能通过单一SQL语句搞定的。建议你先分组统计(插入时间->通话类型->电话号码->长途短途等),形成视图或中间表/临时表,再进一步继续统计,填入数据...


希望能给你有所帮助。

[ 本帖最后由 jeff 于 2007-11-6 16:40 编辑 ]
3#
发表于 2007-11-6 17:45:17 | 只看该作者
假设你的表叫 TEL

语句为:

SELECT tp1.日期, tp1.总通话量,  tp2.拨入电话, tp3.拨出电话
FROM
( SELECT DATE(t1.插入时间) as 日期, count(t1.id) as 总通话量 FROM TEL t1
  WHERE t1.插入时间 > '2007-11-01 00:00:00' AND t1.插入时间 < '2007-12-01 00:00:00'
GROUP BY DATE(t1.插入时间) ) tp1,
( SELECT DATE(t2.插入时间) as 日期, count(t2.id) as 拨入电话 FROM TEL t2
  WHERE t2.插入时间 > '2007-11-01 00:00:00' AND t2.插入时间 < '2007-12-01 00:00:00'  AND t2.通话类型 = '拨入'
GROUP BY DATE(t2.插入时间) ) tp2,
( SELECT DATE(t3.插入时间) as 日期, count(t3.id) as 拨出电话 FROM TEL t3
  WHERE t3.插入时间 > '2007-11-01 00:00:00' AND t3.插入时间 < '2007-12-01 00:00:00'  AND t3.通话类型 = '拨出'
GROUP BY DATE(t3.插入时间) ) tp3
WHERE tp1.日期 = tp2.日期 and tp1.日期 = tp3.日期 ;

这种写法效率是个问题,结果集如果很大的话,会很慢的。希望对你有帮助。

[ 本帖最后由 edwin_chen 于 2007-11-6 17:46 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|手机版|MariaDB社区 ( 京ICP备07012489号    |
业务联系: QQ:48474881; 邮箱: 48474881@qq.com; 电话:13911732319
声明:本站部分文章是网友转载,若未经作者同意或署名有误,请联系网站管理员。

GMT+8, 2024-11-10 07:11 , Processed in 0.072340 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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