sql中group by将查询结果按某一列或多列值分组,值相等的为一组。对查询结果分组的目的是为了细化集函数的作用对象。如果未对查询结果分组, 集函数将作用于整个查询结果。用group by后,先对值相等的分组,然后对每一组作用集函数计算。
for example:表company(商家表),字段:id,int 代码 PK,cname,varchar(50)商家名,
表favorite(收藏表),字段:id,int 代码 PK,company_id,int 收藏的商家id;--当收藏一个商家时,favorite收藏表f就新增一条记录,company_id就是company中的id,company.id与favorite表示一对多关系,company.id是favorite表的外键,company.id=favorite.company_id
取出company表中的cname,按favorite表中被收藏的条数来排序 。
sql:select company.id,company.cname,count(favorite.company_id) as countfavorite from company inner join favorite on company.id=favorite.company_id group by company.id,company.cname order by countfavorite desc
如果要输出被收藏条数在一定数量(>n)上的记录,需要在group by company.id,company.cname 后加上having count(favorite.company_id)>n,不能用countfavorite,提示countfavorite无效,必须用count(favorite.company_id);不能用where,错误提示:聚合错误。