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;