mysql-如何获取一年里每个月的记录总数,要求不管该月有没有数据都要显示,没有的显示为0?

问题描述

如何获取一年里每个月的记录总数,要求不管该月有没有数据都要显示,没有的显示为0?

假如我有个数据表,里面只有“2007-05-29”的一条数据,
我希望得到的结果是
月份 数据
1 0
2 0
3 0
4 0
5 1
6 0

7 0
8 0
9 0
10 0
11 0
12 0

有个主键商品id,销售日期date,,,mysql的数据库,有劳各位了~~~

解决方案

现写了一个,日期自己再加工加工吧

 create table MONTH_TABLE(
  MONTH_NUM INT
)
CREATE TABLE TESTDATE(
   GOOD_KEY VARCHAR(60),
   GOOD_DATE VARCHAR(60)
)
INSERT INTO MONTH_TABLE(MONTH_NUM) VALUES(1);
INSERT INTO MONTH_TABLE(MONTH_NUM) VALUES(2);
INSERT INTO MONTH_TABLE(MONTH_NUM) VALUES(3);
INSERT INTO MONTH_TABLE(MONTH_NUM) VALUES(4);
INSERT INTO MONTH_TABLE(MONTH_NUM) VALUES(5);
INSERT INTO MONTH_TABLE(MONTH_NUM) VALUES(6);
INSERT INTO MONTH_TABLE(MONTH_NUM) VALUES(7);
INSERT INTO MONTH_TABLE(MONTH_NUM) VALUES(8);
INSERT INTO MONTH_TABLE(MONTH_NUM) VALUES(9);
INSERT INTO MONTH_TABLE(MONTH_NUM) VALUES(10);
INSERT INTO MONTH_TABLE(MONTH_NUM) VALUES(11);
INSERT INTO MONTH_TABLE(MONTH_NUM) VALUES(12);
INSERT INTO TESTDATE(GOOD_KEY,GOOD_DATE) VALUES('ASDFA','2007-05-09');

select MT.MONTH_NUM 日期,ifnull(total_num,0) as 数量 from
MONTH_TABLE MT left join
(
SELECT T.*,MONTH(GOOD_DATE)+0 M FROM (
    select count(good_key)  TOTAL_NUM,GOOD_DATE from TESTDATE group by GOOD_DATE
) T) t on t.m = MT.MONTH_NUM
order by MT.MONTH_NUM

解决方案二:

1、建一张辅助表,里面插入1-12数字,共12行记录。
2、通过group by日期统计月份数据。
3、两张表连表查询就可以了。

解决方案三:

请问怎么将判断为空时为0显示,不然这样关联查询还是得不到想要的结果,不能显示每个月,只能是有数据的那几个月

解决方案四:

请问怎么将判断为空时为0显示,不然这样关联查询还是得不到想要的结果,不能显示每个月,只能是有数据的那几个月

解决方案五:

先插入至临时表, 再select 出来

时间: 2024-08-31 01:15:08

mysql-如何获取一年里每个月的记录总数,要求不管该月有没有数据都要显示,没有的显示为0?的相关文章

MYSQL中获取得最后一条记录的语句_Mysql

在MySQL中,使用auto_increment类型的id字段作为表的主键,并用它作为其他表的外键,形成"主从表结构",这是数据库设计中常见的用法.但是在具体生成id的时候,我们的操作顺序一般是:先在主表中插入记录,然后获得自动生成的id,以它为基础插入从表的记录.这里面有个困难,就是插入主表记录后,如何获得它对应的id.通常的做法,是通过"select max(id) from tablename"的做法,但是显然这种做法需要考虑并发的情况,需要在事务中对主表加以

mysql 随机获取记录order by rand 优化

下面我就以users(userId,userName,password--)表(有一百多万条记录)为例,对比讲解下几个方法效率问题:  代码如下 复制代码 1.select * from users order by rand() LIMIT 1 执 行该sql语句,老半天没有反应,最后被迫手动停止执行,怎个伤人了得啊!后来我查了一下MYSQL手册,里面针对RAND()的提示大概意思就是,在 ORDER BY从句里面不能使用RAND()函数,因为这样会导致数据列被多次扫描,导致效率相当相当的低!

mysql获取group by的总记录行数另类方法_Mysql

mysql获取group by内部可以获取到某字段的记录分组统计总数,而无法统计出分组的记录数. mysql的SQL_CALC_FOUND_ROWS 使用 获取查询的行数 在很多分页的程序中都这样写: 代码如下 SELECT COUNT(*) from `table` WHERE ......; 查出符合条件的记录总数 代码如下 SELECT * FROM `table` WHERE ...... limit M,N; 查询当页要显示的数据 这样的语句可以改成: 代码如下 SELECT SQL_

mysql获取group by的总记录行数方法

mysql获取group by内部可以获取到某字段的记录分组统计总数,而无法统计出分组的记录数. mysql的SQL_CALC_FOUND_ROWS 使用 获取查询的行数 在很多分页的程序中都这样写:  代码如下 复制代码 SELECT COUNT(*) from `table` WHERE ......;   查出符合条件的记录总数    代码如下 复制代码 SELECT * FROM `table` WHERE ...... limit M,N; 查询当页要显示的数据 这样的语句可以改成:

Mysql获取id最大值、表的记录总数等相关问题的方法汇总_Mysql

一.mysql 获取当前字段最大id SQL语句: select max(id) from yourtable; 二.获取mysql表自增(Auto_increment)值 Auto_increment是表中的一个属性,只要把表的状态获取到,也就可以获取到那个自增值 SQL语句: show table status like "表名"; php代码实现 $get_table_status_sql = "SHOW TABLE STATUS LIKE '表名'"; $r

php更新mysql后获取改变行数的方法_php技巧

本文实例讲述了php更新mysql后获取改变行数的方法.分享给大家供大家参考.具体分析如下: 一个php更新mysql后获取改变的行数,在php中提供mysql函数来获取最后执行查询所影响的记录数:mysql_affected_rows(), 返回最近一次与 连接句柄 关联的 INSERT,UPDATE 或 DELETE 查询所影响的记录行数.FOUND_ROWS() : select ROW_COUNT():update delete insert. 下面就是文章的主要内容描述,代码如下: 复

MySQL 随机函数获取数据速度和效率分析_Mysql

在mysql中带了随机取数据的函数,在mysql中我们会有rand()函数,很多朋友都会直接使用,如果几百条数据肯定没事,如果几万或百万时你会发现,直接使用是错误的.下面我来介绍随机取数据一些优化方法. SELECT * FROM table_name ORDER BY rand() LIMIT 5; rand在手册里是这么说的: RAND() RAND(N) 返回在范围0到1.0内的随机浮点值.如果一个整数参数N被指定,它被用作种子值. mysql> select RAND(); -> 0.

php更新mysql后获取改变的行数

下面就是文章的主要内容描述.  代码如下 复制代码 found_rows() : select row_count() : update delete insert 注:需要配合相应的操作一起使用,否则返回的值只是1和-1(都是不正确的值) 示例:  代码如下 复制代码 drop database if exists `mytest`; create database `mytest`; use `mytest`; drop table if exists `MyTestTable`; crea

Java实现获得MySQL数据库中所有表的记录总数可行方法

可以通过SELECT COUNT(*) FROM table_name查询某个表中有多少条记录.本文给出两种可行的Java程序查询所有别的记录方法,感兴趣朋友可以了解下 在MySQL中,可以通过SELECT COUNT(*) FROM table_name查询某个表中有多少条记录.如果想知道某个数据库中所有别的记录总数应该怎么做呢?本文给出两种可行的Java程序,解决该问题. 1. 首先确定数据库中有多少个表,然后对每个表执行SELECT COUNT(*) FROM table_name  代码