• 条件:无;

  • 每个学校每种性别:

先按学校分组,之后再按性别分组 ;顺序不能倒过来,倒过来就变成了先按性别分好组之后,再按学校分组了,所以应该是:group by gender university,gender

  • 用户数:

使用聚合函数count(id),id是唯一标识,应该使用id,虽然使用其他结果没有错,但是在实际项目开发中的大量数据下,会发生误差。

  • 30天内平均活跃天数:

使用聚合函数avg(active_days_within_30)

  • 平均发帖数量: 使用聚合函数avg(question_cnt)

tips:分组字段不能是聚合函数;

在面试某上海上市金融科技公司中曾被问到的一个问题是:

  1. 你在项目中你用过分组函数吗?

我:用过(必须展现实力)

  1. 那你听清楚我下面这个问题,分组SQL语句中,select和from和where和group by 和 having 这几部分的执行顺序是怎么样的?

我:先是from,再到 where ,再到select,再到group by ,最后having。

  1. 你能说说为什么是这样子的吗?

我:因为首先肯定是要确定数据从哪张表来,然后按where条件查询出结果,再然后才能进行group by分组(分组条件可以有多个,按字段顺序依次分组),最后是由having对分组后的结果集进行过滤

SELECT 
  gender,
  university,
  COUNT(id) user_num,
  avg(active_days_within_30) avg_active_day,
  avg(question_cnt) avg_question_cnt
FROM user_profile
GROUP BY university,gender