你可以测试啊
group
by
一般和
聚合函数
一起使用才有意义,比如
count
sum
avg等,使用group
by的两个要素:
(1)
出现在select后面的字段
要么是聚合函数中的,要么是group
by
中的.
(2)
要筛选结果
可以先使用where
再用group
by
或者先用group
by
再用having
下面看下
group
by多个条件的分析:
在SQL查询器输入以下语句
create
table
test
(
a
varchar(20),
b
varchar(20),
c
varchar(20)
)
insert
into
test
values(1,'a','甲')
insert
into
test
values(1,'a','甲')
insert
into
test
values(1,'a','甲')
insert
into
test
values(1,'a','甲')
insert
into
test
values(1,'a','乙')
insert
into
test
values(1,'b','乙')
insert
into
test
values(1,'b','乙')
insert
into
test
values(1,'b','乙')
按照
c
b
顺序分组
select
count(a),b,c
from
test
group
by
c,b
易客CRM之前的版本中有一个报表是按月统计销售情况,最近有个客户想按周统计销售情况。按月统计的Sql语句比较好写,sql语句如下:SELECT DATE_FORMAT(ec_salesorder.duedate,’%Y-%m’) as m, sum(ec_salesorder.total) as total, count(*) as so_count FROM ec_salesorder GROUP BY m ORDER BY m,也就是把duedate日期以月的形式显示,然后groupby,那么按周如何统计呢?
搜了一下mysql的manual,在这里找到一个解决方法,通过mysql的week函数来做,sql语句如下:SELECT WEEK(ec_salesorder.duedate) as m, sum(ec_salesorder.total) as total, count(*) as so_count FROM ec_salesorder GROUP BY m ORDER BY m,这个方法有个缺陷,不能显示年份,仅仅靠一个周数不方便查看统计信息。
继续研究mysql manual,在DATE_FORMAT函数介绍发现2个格式符和周有点关系:
%X Year for the week where Sunday is the first day of the week, numeric, four digitsused with %V
%x Year for the week, where Monday is the first day of the week, numeric, four digitsused with %v
把上面的Sql语句中改成:
SELECT DATE_FORMAT(ec_salesorder.duedate,’%x %v’) as m, sum(ec_salesorder.total) as total, count(*) as so_count FROM ec_salesorder GROUP BY m ORDER BY m
显示的结果如下:
m total so_count
2009 11 10000.00 3
2009 12 44000.00 5
如果周日为一周的第一天,那么sql语句应该为:
SELECT DATE_FORMAT(ec_salesorder.duedate,’%X %V’) as m, sum(ec_salesorder.total) as total, count(*) as so_count FROM ec_salesorder GROUP BY m ORDER BY m
结果应该没错,不出意外,易客CRM下个版本将增加按周统计销售情况的报表。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)