mysql group by 可以为多个值吗
在MySQL中,你可以获取表达式组合的连接值。你可以使用DISTINCT删去重复值。假若你希望多结果值进行排序,则应该使用ORDER
BY子句。若要按相反顺序排列,将DESC(递减)关键词添加到你要用ORDERBY子句进行排序的列名称中。
默认顺序为升序;可使用ASC将其明确指定。
SEPARATOR后面跟随应该被插入结果的值中间的字符串值。默认为逗号(‘,')。通过指定SEPARATOR'',你可以删除所有分隔符。
mysql select * 与group by 一起用
不是,groupby是根据你的字段来作优先级来做显示
orderby是根据你的字段来做排序,groupby是根据你的字段来进行分组
如何对mysql的group
例子 aa表ab
12310
12312
123411
123414
首先 group 是用来分组的 不是过滤重复项的。重复项删除语句 DISTINCT用这个 。 select DISTINCT(a) from aa
结果就是a
123
1234
group by用来分组的
select a, sum(b) from aa group by a
sum意思是总和。结果就是
ab
12322
123425
语句的目的是以a为目标 需要知道 相同名字的物品在b列一共有多少数量总和
select a,count(b) from aa group by a
count 意思行数总和结果就是
ab
1232
12342
语句目的是 相同名字的物品 一共有几行易客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 digits; used with %v
%x year for the week, where monday is the first day of the week, numeric, four digits; used 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下个版本将增加按周统计销售情况的报表。
为什么 MySQL 中 GROUP
group就是对表中的记录按照相应的字段或字段表达式进行分组,从而获取每个组中的唯一一条汇总信息。group通常要配合聚合函数如min,max,sum,count等一起使用才有意义,有时我们还需要进一步使用having关键字对分组汇总信息做进一步筛选。
请注意使用group分组时,输出字段列表只能包含参与分组的字段以及汇总信息,未参与分组的字段不得出现于输出列表中,否则会导致报错。
group应用举例:
订单表(订单id,商品,数量,单价,日期)
现在需要查出每日的订单笔数和每日销售总额
运行下列分组汇总SQL语句即可轻松获取:
select 日期,count(*) as 订单笔数,
sum(数量*单价) as 当日销售总额
select * from 学生表 where 姓名 in
(select 姓名 from 学生表 group by 姓名
having count(*)>1) order by 姓名;public static boolean isnumeric(string str){
for (int i = str.length();--i>=0;){
if (!character.isdigit(str.charat(i))){
return false;
return true;