mysql复杂查询

一.问题描述:数据库存储了每天发布的文章的信息,但是由于不是每天都有文章发布,可能有一天就没有数据。

需求就是把每一天的文章输出数量都显示,当天无输出则为0。

解决办法:大致思路是想使用left join,最好是得到一个30天日期的表格数据

之前想出了三种方案:

1.使用mysql数据库 函数来解决, 但是发现返回值不能为一个表格

2.使用Java编写,对数据库返回的List<Map>进行操作,但是这样写出来的东西过于复杂,循环太多

3.建立一张完全存日期的表格,再用存储过程插入前后一年的日期数据

实现方法如下:

1.建表语句省略

2.存储过程代码

//存储过程
DROP PROCEDURE if exists test_insert ;    
DELIMITER ;;  
CREATE PROCEDURE test_insert ()  
BEGIN  
DECLARE i INT DEFAULT -365;
WHILE i<365
DO  
insert into test values (DATE_SUB(NOW(),INTERVAL i DAY));  
SET i=i+1;  
END WHILE ;  
commit;  
END;;  
  
CALL test_insert();
3.sql语句

select a.日期,IFNULL(b.数量, 0) 数量 from (select DATE_FORMAT(mdate,'%y-%m-%d') 日期 from test where mdate>DATE_SUB(NOW(),INTERVAL 30 DAY) and mdate<NOW() order by 1) a
left join (select DATE_FORMAT(addtime,'%y-%m-%d') 日期,count(1) 数量 from cp_cms_content where addtime>DATE_SUB(NOW(),INTERVAL 30 DAY) GROUP BY 1 ORDER BY 1) b on a.日期=b.日期

二.问题描述:统计每个月的文章输出量

直接上代码,我觉得这个应该大家也会用的到:

//查询每个月的数量统计
select DATE_FORMAT(addtime,'%Y-%m') as 月份,COUNT(1) as 数量 from cp_cms_content where DATE_FORMAT(addtime,'%Y')=2016 group by 月份   order by 月份


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值