忘记密码   免费注册 查看新帖 | 论坛精华区

ChinaUnix.net

  平台 论坛 博客 认证专区 大话IT HPC论坛 徽章 文库 沙龙 自测 下载 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
12下一页
最近访问板块 发新帖
查看: 4073 | 回复: 12

求效率最高的mysql语句 [复制链接]

论坛徽章:
0
发表于 2012-04-18 11:29 |显示全部楼层
5可用积分
有一组人:甲乙丙丁...,
表中是每小时统计的他们的收入数据,
现在要求统计他们每天的汇总收入的单小时最高值

比如如下数据,统计完应该是
2012-04-10 的汇总收入的小时最高值13(11点时的甲乙丙丁小时收入的和:2+3+3+5=13)
2012-04-11 的汇总收入的小时最高值是22(发生在10点)

求sql语句。。。。

数据如下
  1. 人   时间                        收入
  2. 甲   2012-04-10  10:10:10      1
  3. 乙   2012-04-10  10:10:10      2
  4. 丙   2012-04-10  10:10:10      3
  5. 丁   2012-04-10  10:10:10      4
  6. 甲   2012-04-10  11:10:10      2
  7. 乙   2012-04-10  11:10:10      3
  8. 丙   2012-04-10  11:10:10      3
  9. 丁   2012-04-10  11:10:10      5
  10. 甲   2012-04-11  10:10:10      3
  11. 乙   2012-04-11  10:10:10      6
  12. 丙   2012-04-11  10:10:10      5
  13. 丁   2012-04-11  10:10:10      8
  14. 甲   2012-04-11  11:10:10      2
  15. 乙   2012-04-11  11:10:10      3
  16. 丙   2012-04-11  11:10:10      3
  17. 丁   2012-04-11  11:10:10      5
复制代码

最佳答案

查看完整内容

写了个示例: mysql> select * from t; +------+---------------------+--------+ | u | date | salary | +------+---------------------+--------+ | a | 2012-04-10 10:10:10 | 1 | | b | 2012-04-10 10:10:10 | 2 | | c | 2012-04-10 10:10:10 | 3 | | d | 2012-04-10 10:10:10 | 4 | | a | 2012-04-10 11:10:10 | 2 | | b | 2012-04-10 11:10:10 | ...

论坛徽章:
0
发表于 2012-04-18 11:29 |显示全部楼层
写了个示例:
mysql> select * from t;
+------+---------------------+--------+
| u    | date                | salary |
+------+---------------------+--------+
| a    | 2012-04-10 10:10:10 |      1 |
| b    | 2012-04-10 10:10:10 |      2 |
| c    | 2012-04-10 10:10:10 |      3 |
| d    | 2012-04-10 10:10:10 |      4 |
| a    | 2012-04-10 11:10:10 |      2 |
| b    | 2012-04-10 11:10:10 |      3 |
| c    | 2012-04-10 11:10:10 |      3 |
| d    | 2012-04-10 11:10:10 |      5 |
| a    | 2012-04-11 10:10:10 |      3 |
| b    | 2012-04-11 10:10:10 |      6 |
| c    | 2012-04-11 10:10:10 |      5 |
| d    | 2012-04-11 10:10:10 |      8 |
| a    | 2012-04-11 11:10:10 |      2 |
| b    | 2012-04-11 11:10:10 |      3 |
| c    | 2012-04-11 11:10:10 |      3 |
| d    | 2012-04-11 11:10:10 |      5 |
+------+---------------------+--------+
16 rows in set (0.00 sec)

mysql> select date(date),max(ss) from(
    -> select date,sum(salary) ss from t group by date) a group by date(date);
+------------+---------+
| date(date) | max(ss) |
+------------+---------+
| 2012-04-10 |      13 |
| 2012-04-11 |      22 |
+------------+---------+
2 rows in set (0.00 sec)

论坛徽章:
0
发表于 2012-04-18 11:50 |显示全部楼层
我感觉这个终极优化不在SQL层面啊,如果用SQL层面标准的分组统计,取最大值就是最简化的写法了~~

论坛徽章:
0
发表于 2012-04-18 12:22 |显示全部楼层
回复 3# junsansi


    这个好用,可我还想知道是哪个时间点发生最大值,有办法吗

论坛徽章:
0
发表于 2012-04-18 13:11 |显示全部楼层
回复 4# yuhuohu
根据三思大哥的Sql, 作一点修改就可以满足你 的要求了,
不过个人优化一下,如果这个只是报表还行,实时查询的话,表设计就有问题了。
还有lz大哥这么多分,才给5分


mysql> select * from t_group;
+------+---------------------+--------+
| user | time                | salary |
+------+---------------------+--------+
| a    | 2012-04-10 10:10:10 |      1 |
| b    | 2012-04-10 10:10:10 |      2 |
| c    | 2012-04-10 10:10:10 |      3 |
| d    | 2012-04-10 10:10:10 |      4 |
| a    | 2012-04-11 22:10:10 |     50 |
| b    | 2012-04-11 11:10:10 |     12 |
| b    | 2012-04-10 11:10:10 |     12 |
+------+---------------------+--------+
7 rows in set (0.00 sec)

mysql> select time ,max(ss) from (select time,sum(salary) ss from t_group group by date_format(time,'%Y-%m-%d:%k') )a group by date(time);
+---------------------+---------+
| time                | max(ss) |
+---------------------+---------+
| 2012-04-10 10:10:10 |      12 |
| 2012-04-11 11:10:10 |      50 |
+---------------------+---------+
2 rows in set (0.00 sec)

   

论坛徽章:
0
发表于 2012-04-18 13:29 |显示全部楼层
子查询的中的分组精确到每天的小时(24小时制), 外层再以日期分组求当天的Max值,也就是子查询中的小时每组中最大值的,

论坛徽章:
0
发表于 2012-04-18 13:57 |显示全部楼层
RogerZhuo 发表于 2012-04-18 13:11
回复 4# yuhuohu
根据三思大哥的Sql, 作一点修改就可以满足你 的要求了,
不过个人优化一下,如果这个只 ...


谢谢哥们,其实我是点错了才点到悬赏的{:2_179:}

论坛徽章:
0
发表于 2012-04-18 14:01 |显示全部楼层
回复 7# yuhuohu
不客气, 开玩笑的呢

   

论坛徽章:
0
发表于 2012-04-18 14:33 |显示全部楼层

论坛徽章:
0
发表于 2012-05-03 12:56 |显示全部楼层
这么快就解决了?、
您需要登录后才可以回帖 登录 | 注册

本版积分规则

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802020122
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP