mysql之GROUP BY

DROP TABLE IF EXISTS `products`
CREATE TABLE `products` (
`id` int(10) unsigned not null auto_increment,
`vender_id` int(10) unsigned not null default 0,
`name` char(40) not null default '',
PRIMARY KEY  (`id`)
)
ENGINE=MyISAM  DEFAULT CHARSET=utf8;

mysql group by

SELECT `vender_id`, COUNT(*) as sum
FROM `products`
WHERE vender_id =1010
GROUP BY `vender_id`
ORDER BY sum;


通过上面的SQL语句可以看到简单GROUP BY用法。

GROUP BY需要注意的地方:

1、GROUP BY可以包含任意数目列,可以对分组进行嵌套进行更加详细的控制。

2、GROUP BY进行嵌套了分组,将在最后规定的分组进行汇总,换句话就是说建立分组时指定所有列一起进行计算。

3、GROUP BY列出的所有列必须是检索列或者有效的表达式(但不能是聚集函数),如果SELECT用表达式则GROUP BY用相同的表达式不能使用别名。

4、除聚集函数外的所有SELECT列必须在GROUP BY中给出。

5、如果列中NULL值则作为一个分组返回,若干NULL则进行合并到一个NULL分组中。

6、GROUP BY必须出现在WHERE之后ORDER BY之前。


过滤条件WHERE过滤行记录,HAVING过滤分组记录

SELECT `vender_id`, COUNT(*) AS sum
FROM `products`
GROUP BY `vender_id`
HAVING sum > 200;

HAVING 和 WHERE区别:WHERE在分组之前进行过滤,HAVING在分组之后进行过滤;WHERE排除的行记录不在分组中这可能会影响计算值,从而影响HAVING中基于这些值过滤掉的分组。

SELECT `vender_id`, COUNT(*) AS sum
FROM `products`
WHERE `id` >100
GROUP BY `vender_id`
HAVAING COUNT(*) > 2
ORDER BY sum;



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值