使用mysql实现1-12月份查询统计

在数据中我们应该如何实现1-12月份统计的查询,今天一个哥们一起探讨这个问题,我想出来了一个方法,但是不便统计,同学使用的oracle,用oracle实现了一种查询。

实现的效果如下:

首先说下我的sql方式:

-- 创建表测试
create table lesson(
	id int auto_increment primary key,
	stuName varchar(60),
	time datetime
);

创建完成后添加数据测试

查询的sql如下:

select t.myYear as 年份,t.monthNo as 月份,count(1) as 数量统计
from(select month(lesson.time) as monthNo,
         year(lesson.time) as myYear,
     lesson.id as id
 from lesson) as t
where t.myYear='2016'
group by t.monthNo;

结果如下:

同学使用的是oracle:大致思路是写12个sum(decode(to_char(lesson.time,'mm'),'01',1,0)),然后实现查询,最终能够实现每个月多少数据量,方便查询。

我考虑了一会儿,模仿他的方式用mysql实现了这样的查询,虽然简单,但是确实能够解决实际问题:

-- 统计方法二
select 
sum(case month(lesson.time) when '1' then 1 else 0 end) as 一月份,
sum(case month(lesson.time) when '2' then 1 else 0 end) as 二月份,
sum(case month(lesson.time) when '3' then 1 else 0 end) as 三月份,
sum(case month(lesson.time) when '4' then 1 else 0 end) as 四月份,
sum(case month(lesson.time) when '5' then 1 else 0 end) as 五月份,
sum(case month(lesson.time) when '6' then 1 else 0 end) as 六月份,
sum(case month(lesson.time) when '7' then 1 else 0 end) as 七月份,
sum(case month(lesson.time) when '8' then 1 else 0 end) as 八月份,
sum(case month(lesson.time) when '9' then 1 else 0 end) as 九月份,
sum(case month(lesson.time) when '10' then 1 else 0 end) as 十月份,
sum(case month(lesson.time) when '11' then 1 else 0 end) as 十一月份,
sum(case month(lesson.time) when '12' then 1 else 0 end) as 十二月份
from lesson
where year(lesson.time)='2016';

最后运行的结果为:

好了,以上就是整体的思路,如果你还有更好的想法,请留言~

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: 可以使用以下 SQL 语句来统计各市 1 到 12 月份的订单量: ``` SELECT city, SUM(CASE WHEN MONTH(created_at) = 1 THEN 1 ELSE 0 END) as 'January', SUM(CASE WHEN MONTH(created_at) = 2 THEN 1 ELSE 0 END) as 'February', SUM(CASE WHEN MONTH(created_at) = 3 THEN 1 ELSE 0 END) as 'March', SUM(CASE WHEN MONTH(created_at) = 4 THEN 1 ELSE 0 END) as 'April', SUM(CASE WHEN MONTH(created_at) = 5 THEN 1 ELSE 0 END) as 'May', SUM(CASE WHEN MONTH(created_at) = 6 THEN 1 ELSE 0 END) as 'June', SUM(CASE WHEN MONTH(created_at) = 7 THEN 1 ELSE 0 END) as 'July', SUM(CASE WHEN MONTH(created_at) = 8 THEN 1 ELSE 0 END) as 'August', SUM(CASE WHEN MONTH(created_at) = 9 THEN 1 ELSE 0 END) as 'September', SUM(CASE WHEN MONTH(created_at) = 10 THEN 1 ELSE 0 END) as 'October', SUM(CASE WHEN MONTH(created_at) = 11 THEN 1 ELSE 0 END) as 'November', SUM(CASE WHEN MONTH(created_at) = 12 THEN 1 ELSE 0 END) as 'December' FROM orders GROUP BY city ``` 其中 `orders` 是表名,`city` 是城市名的列,`created_at` 是订单创建时间的列,统计的结果将按城市分组显示。 使用 MySQL 的 `MONTH()` 函数可以从日期中提取出月份使用 `CASE` 语句可以根据月份返回 1 或 0,然后使用 `SUM()` 函数计算总数。 ### 回答2: 在MySQL中通过订单创建时间统计各市1到12月份的订单量,可以使用SQL语句完成此任务。 首先,假设订单表的名称为"orders",该表包含了以下字段:订单ID(order_id)、订单创建时间(create_time)和所在市(city)。 然后,我们可以使用以下SQL语句来实现统计: ``` SELECT city, MONTH(create_time) AS month, COUNT(order_id) AS order_count FROM orders WHERE MONTH(create_time) BETWEEN 1 AND 12 GROUP BY city, MONTH(create_time) ORDER BY city, month; ``` 上述SQL语句的意思是选择城市(city)、订单创建时间的月份(month)以及订单数量(order_count),从"orders"表中。 然后,在WHERE子句中,我们指定了订单创建时间的月份必须在1到12之间。 接下来,使用GROUP BY子句按照城市和月份分组,这样我们可以得到每个城市每个月的订单数量。 最后,使用ORDER BY子句按照城市和月份排序结果,以便观察。 执行完以上SQL语句后,你将获得一个结果集,其中包含了各市1到12月份的订单量统计信息。 ### 回答3: 要通过MySQL统计每个月的订单量,可以使用以下步骤: 1. 创建一个订单表,包含订单号(order_id)、订单创建时间(create_time)和市(city)等字段。 2. 使用GROUP BY和MONTH函数对订单表进行分组,以月份为单位统计订单量。可以编写如下SQL语句: ``` SELECT MONTH(create_time) AS month, COUNT(*) AS order_count FROM orders GROUP BY month ``` 3. 使用WHERE子句筛选出对应市的订单量。假设需要统计市为1到12的订单量,可以在SQL语句中添加条件: ``` SELECT MONTH(create_time) AS month, COUNT(*) AS order_count FROM orders WHERE city BETWEEN 1 AND 12 GROUP BY month ``` 以上SQL语句将返回一个结果集,包含每个月份(通过MONTH函数获取)和对应的订单量。可以根据实际情况对返回的结果进一步处理或展示。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值