MySQL如何按月份统计数据详解(转)
这篇文章主要对MySQL按月份统计数据介绍:
表finance有俩个字段如下
date date
money double(15,2)
下面需要对表finance的2010年财务数据,按月进行统计
Sql代码
1 2 |
select DATE_FORMAT(date,'%Y-%m') as month,sum(money) as money from finance where DATE_FORMAT(date,'%Y')=2010 group by month order by month |
下面是按周统计
查看MySQL的manual 手册
%X Year for the week where Sunday is the first day of the week, numeric, four digits; used with %V
%x Year for the week, where Monday is the first day of the week, numeric, four digits; used with %v
其中
1如果周一为一周的第一天,则(小写) DATE_FORMAT(date,’%x %v’)
2如果周日为一周的第一天,则(大写) DATE_FORMAT(date,’%X %V’)
Sql代码
1 2 |
select DATE_FORMAT(date,'%x年-第%v周') as week,sum(money) as money from finance_base where DATE_FORMAT(date,'%Y')=2010 group by week |
其中需要注意的地方是,如果日期是时间戳存储的,需要用这个函数FROM_UNIXTIME
用法:
- FROM_UNIXTIME(unix_timestamp) , FROM_UNIXTIME(unix_timestamp,format)
格式表如下:
以下说明符可用在 format 字符串中:
说明符 | 说明 |
%a | 工作日的缩写名称 (Sun..Sat) |
%b | 月份的缩写名称 (Jan..Dec) |
%c | 月份,数字形式(0..12) |
%D | 带有英语后缀的该月日期 (0th, 1st, 2nd, 3rd, …) |
%d | 该月日期, 数字形式 (00..31) |
%e | 该月日期, 数字形式(0..31) |
%f | 微秒 (000000..999999) |
%H | 小时(00..23) |
%h | 小时(01..12) |
%I | 小时 (01..12) |
%i | 分钟,数字形式 (00..59) |
%j | 一年中的天数 (001..366) |
%k | 小时 (0..23) |
%l | 小时 (1..12) |
%M | 月份名称 (January..December) |
%m | 月份, 数字形式 (00..12) |
%p | 上午(AM)或下午( PM) |
%r | 时间 , 12小时制 (小时hh:分钟mm:秒数ss 后加 AM或PM) |
%S | 秒 (00..59) |
%s | 秒 (00..59) |
%T | 时间 , 24小时制 (小时hh:分钟mm:秒数ss) |
%U | 周 (00..53), 其中周日为每周的第一天 |
%u | 周 (00..53), 其中周一为每周的第一天 |
%V | 周 (01..53), 其中周日为每周的第一天 ; 和 %X同时使用 |
%v | 周 (01..53), 其中周一为每周的第一天 ; 和 %x同时使用 |
%W | 工作日名称 (周日..周六) |
%w | 一周中的每日 (0=周日..6=周六) |
%X | 该周的年份,其中周日为每周的第一天, 数字形式,4位数;和%V同时使用 |
%x | 该周的年份,其中周一为每周的第一天, 数字形式,4位数;和%v同时使用 |
%Y | 年份, 数字形式,4位数 |
%y | 年份, 数字形式 (2位数) |
%% | ‘%’文字字符 |
按小时统计某一天相应网站的平均访问时间:
1 2 |
select sys_id,FROM_UNIXTIME(scan_time,'%Y-%m-%d %H') as hour,avg(load_time) as avg_time from sys_log where FROM_UNIXTIME(scan_time,'%Y-%m-%d')=2013-01-13 and sys_id=1 group by hour order by hour |
- ThinkSNS目录结构及二次开发
- MySQL数据库连接不上服务器的多种解决方法(10060错误)