mysql按年,⽉,⽇分组(groupby)统计,count函数内添加筛选
条件及其其他函数。。。
create_time 为数据库⼀时间相关字段,需要根据这个字段将查询到的数据按照年(⽉/⽇等)分组:
时间格式:
SELECT DATE_FORMAT(create_time,'%Y%m%d') days,COUNT(id) COUNT FROM role GROUP BY days;
SELECT DATE_FORMAT(create_time,'%Y%u') weeks,COUNT(id) COUNT FROM role GROUP BY weeks;
SELECT DATE_FORMAT(create_time,'%Y%m') months,COUNT(id) COUNT FROM role GROUP BY months
时间戳格式
SELECT FROM_UNIXTIME(create_time,'%Y%m%d') days,COUNT(id) COUNT FROM role GROUP BY days;
SELECT FROM_UNIXTIME(create_time,'%Y%u') weeks,COUNT(id) COUNT FROM role GROUP BY weeks;
SELECT FROM_UNIXTIME(create_time,'%Y%m') months,COUNT(id) COUNT FROM role GROUP BY months
其他⼀些按照时间查询⽅式:
当天内的数据
select * from 表 where date(时间字段)=date(now())
select * from 表 where to_days(时间字段) = to_days(now());
最近N天内的数据
select * from 表 WHERE to_days(now()) - to_days(时间字段) <= N
当然也可以使⽤ date_sub()函数,即
select * from 表 WHERE DATE_SUB(NOW(), INTERVAL N DAY) <= date(时间字段)
查询最近⼀周数据
select * from 表 where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(时间字段);
同理,查询 N 天内数据,只需将 7 换为 N,查询⼀⽉内换为 MONTH,⼀年内换为 YEAR.
查询 01-01 ⽇⾄ 02-02 ⽇内的数据
select * from 表 where DATE_FORMAT(时间字段,'%m-%d') >= '01-01' and DATE_FORMAT(birthday,'%m-%d') <= '02-02';
count() 统计数量时,要筛选统计结果,⽐如表中有字段 number,color, 必须 number = 1 且 color = 'red' 时才统计:
select count(number=1 and color = 'red' or NULL) from table;
or Null 不可省略, 当 number=1 and color = 'red' 条件⽆匹配时,查询结果是 false 不是 null,count在 值是NULL是 不统计数.
也可写为
select count(if(number=1 and color = 'red' true,null)) from table;
也可配合其他函数使⽤
select count(length(name) > 6 or NULL) from table
插⼊数据,id 为⽣成的 uuid
直接使⽤ uuid() 函数,⽣成的是⼀个 36位长度的,例如:184fea35-341f-11e9-8ede-487b6bd31bf7,其中有4个字符是”-“ 的id.在mysql中可以使⽤ replace() 函数来替换”-“,即
insert into table(id,number,color) values(replace(uuid(), '-', ''),'201423431223','red');
模糊查询:
SELECT * FROM user
WHERE
id LIKE CONCAT('%',#{id},'%')
OR
mysql下载csdnname LIKE CONCAT(#{keyword},'%')
sum()求和函数,
select IFNULL(sum(a),0) as one
from test
where id = "123465";
使⽤这个函数时最好与 ifnull()搭配使⽤,因为当⽰例字段 a ⽆值时,sum()结果为null,这样使⽤返回值做计算时,就会抛出异常.使⽤ifnull()为查询结果添加默认值,避免发⽣异常.
待添加......
————————————————
版权声明:本⽂为CSDN博主「MR_L_0927」的原创⽂章,遵循CC 4.0 BY-SA版权协议,转载请附上原⽂出处链接及本声明。
原⽂链接:blog.csdn/MR_L_0927/article/details/87718605
按⼩时查看
select COUNT(1),
DATE_FORMAT(CREATE_TIME,'%Y-%m-%d %H')
from itm_app_log_monitor_bzxr a group by DATE_FORMAT(CREATE_TIME ,'%Y-%m-%d %H');
mysql按半⼩时分组统计
select sum(revNum),dataStartTime from (
select revNum , DATE_FORMAT( concat(date(dataStartTime),' ',hour(dataStartTime),':',floor( minute(dataStartTime)/30 )*30) ,'%Y-%m-%d %H:%i') as dataStartTime from devicedata
) a
group by DATE_FORMAT( dataStartTime ,'%Y-%m-%d %H:%i')
注释:
想法是将 hh:00-hh:29的数据显⽰成hh:00,hh:30-hh:59的数据显⽰成hh:30 , 然后在group by就好了
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论