11.分组查询

  • • 发表于 6年前
  • • 作者 大妖怪
  • • 11851 人浏览
  • • 7 条评论
  • • 最后编辑时间 6年前
  • • 来自 [技 术]

原创声明:本文为作者原创,未经允许不得转载,经授权转载需注明作者和出处

修改一下数据库中的age:

现在的需求是,统计一下每个年龄的数据各有多少个:

SELECT COUNT(id) '人数', age '年龄' FROM person GROUP BY age;


对没错,在mysql中,通过GROUP BY 对某个字段或者多个字段进行分组查询。
上面是分组统计,那么能否用分组查询数据呢:

SELECT * FROM person GROUP BY age;

很遗憾,上面这句是错的,

它报了这么个错:

Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'mysqltest.person.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

说了这么一大堆,其实意思就是说要查询的字段不包含在被分组的字段中,换句话说,也就是要查询的字段必须从后面GROPU BY 中来选择,所以如果这句话改成这样就对了:

SELECT age FROM person GROUP BY age;


分组也是可以根据多个字段分组的,比如:

SELECT age FROM person GROUP BY age, name;


那么,既然分组的字段有个name,那就应该是可以查询name的:

SELECT age, name FROM person GROUP BY age, name;


当然,这个结果可能有些看不懂,修改一下数据库试试:

这次再运行,并且调换一下GRUOP BY 后面字段的顺序:

可以发现,如果是age在前面就主要以age来进行分组,然在此基础上再以name为基础再继续分组,如果是name在前面就主要以name来进行分组,然在此基础上再以age为基础再继续分组,
因此GROUP BY 的分组优先级也是从前往后的,至于为什么’三妖怪’,每次都只显示一条,是因为三条的age和name是一样的,他们算是一组,所以只显示一条。
说下我个人见解,我认为GROUP BY 大部分情况下用用来统计数据比较多,至于这个查询,我是没研究出有什么实际用途,知道的可以留言讨论。

分享到:
7条评论
Ctrl+Enter
作者

大妖怪

大妖怪

APP:1 帖子:76 回复:200 积分:7517

已加入社区[2943]天

梦里巷口,可有你倚门回首

作者详情》
Top