SQL语句中聚合函数和Group By一同使用时能取到符合条件的记录中哪些列的信息

SQL语句中聚合函数和Group By一同使用时能取到符合条件的记录中哪些列的信息

聚合函数对一组值执行计算并返回单一的值。除了 COUNT 以外,聚合函数忽略空值。聚合函数经常与 SELECT 语句的 GROUP BY 子句一同使用。但是有时候不注意聚合函数和group by 能取到哪些列信息的话,就会出错。


举个例子:如下图所示,我们现在有一个如下图所示的student表

mysql> select * from student;
+------+--------+-------+---------+
| s_id | s_name | s_age | s_class |
+------+--------+-------+---------+
|    1 | 小明   |    20 | 一班    |
|    2 | 小华   |    21 | 一班    |
|    3 | 小红   |    19 | 一班    |
|    4 | 小李   |    20 | 二班    |
|    5 | 小丽   |    21 | 二班    |
|    6 | 小米   |    18 | 二班    |
+------+--------+-------+---------+
6 rows in set

现在我们得到每个班年龄最大的同学的名字,我们先尝试如下的sql语句:

mysql> select s_name,max(s_age),s_class
    -> from student
    -> group by s_class;
+--------+------------+---------+
| s_name | max(s_age) | s_class |
+--------+------------+---------+
| 小明   |         21 | 一班    |
| 小李   |         21 | 二班    |
+--------+------------+---------+
2 rows in set

我们虽然正确得到了每个班的年龄最大的年龄,但是最大的年龄对应的姓名却不正确,因为我们对年龄这列使用了聚合函数,只能得到年龄这一列的数据,不能取得最大年龄对应的记录中其他的列的数据,小明这个数据是group by s_name分组后的第一条数据被填充到这里了。使用聚合函数加group by只能得到符合条件的记录中的使用过聚合函数的那一列和group by 对应的那一列,这两列的信息。就像例子中只能得到每个班级的年龄最大的这些记录中s_age和s_class这个两列的信息。

我们可以使用下面的sql语句得到正确的信息:

mysql> select s.s_name,s.s_age,s.s_class
    -> from student as s,(
    -> select max(s_age) as s_age,s_class
    -> from student
    -> group by s_class) as temp
    -> where s.s_age = temp.s_age and s.s_class = temp.s_class;
+--------+-------+---------+
| s_name | s_age | s_class |
+--------+-------+---------+
| 小华   |    21 | 一班    |
| 小丽   |    21 | 二班    |
+--------+-------+---------+
2 rows in set
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值