MySQL中 group by 1, order by 1 语句是什么意思和group by+聚合函数用法小结

本文解释了SQL中使用GROUP BY 1,2 和 ORDER BY 1,2 的含义,并详细介绍了GROUP BY与HAVING子句的应用场景及常用聚合函数。通过实例说明如何对分组后的数据进行条件过滤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、SQL中 group by 1, order by 1 语句是什么意思


最近学习数据库,在codecademy中, 遇到如下语句

SELECT a.dep_month,
       a.dep_day_of_week,
       AVG(a.flight_count) AS average_flights
  FROM (
        SELECT dep_month,
               dep_day_of_week,
               dep_date,
               COUNT(*) AS flight_count
          FROM flights
         GROUP BY 1,2,3
       ) a
 GROUP BY 1,2
 ORDER BY 1,2;


看到group by 1,2 和 order by 1, 2。看不懂,google,搜到了Stack Overflow 上有回答 What does SQL clause “GROUP BY 1” mean? 

大概意思就是,group by, order by 后面跟数字,指的是 select 后面选择的列(属性),1 代表第一个列(属性),依次类推。

因而上面最外层的

 GROUP BY 1,2
 ORDER BY 1,2
等价于
 GROUP BY a.dep_month, a.dep_day_of_week
 ORDER BY a.dep_month, a.dep_day_of_week

注意,这边从1开始数,而不是0

参考: https://blog.csdn.net/nxjhi/article/details/51340018
         https://stackoverflow.com/questions/7392730/what-does-sql-clause-group-by-1-mean

2、关键字group by 、 Having的 用法

概述

       GROUP BY我们可以先从字面上来理解,GROUP表示分组,BY后面写字段名,就表示根据哪个字段进行分组,如果有用Excel比较多的话,GROUP BY比较类似Excel里面的透视表。

GROUP BY必须得配合聚合函数来用,分组之后你可以计数(COUNT),求和(SUM),求平均数(AVG)等。

2.1、常用聚合函数

  • count() 计数
  • sum() 求和
  • avg() 平均数
  • max() 最大值
  • min() 最小值

2.2、group by + 聚合函数语法

SELECT column_name, aggregate_function(column_name) 
FROM table_name 
WHERE column_name operator value 
GROUP BY column_name;

2.3、HAVING

当然提到GROUP BY 我们就不得不提到HAVING,HAVING相当于条件筛选,但它与WHERE筛选不同,HAVING是对于GROUP BY对象进行筛选。

我们举个例子:

每个部门人数都有了,那如果我们想要进一步知道员工人数大于30000的部门是哪些,这个时候就得用到HAVING了。

语句如下:

SELECT 
  (SELECT d.dept_name FROM departments d WHERE de.dept_no = d.dept_no ) AS 部门
  , count( de.emp_no ) AS 人数 
FROM dept_emp de 
WHERE de.to_date = '9999-01-01' 
GROUP BY de.dept_no 
HAVING count( de.emp_no ) > 30000

结果

参考:https://www.cnblogs.com/mark5/p/11115750.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值