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

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

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQLGROUP BY语句用于将结果按照一个或多个列进行分组,并对每个组应用聚合函数聚合函数对每个组的数据进行计算,并返回一个单一的结果。在 GROUP BY 子句,您可以列出要用于分组的列,然后在SELECT语句使用聚合函数来计算每个组的结果。 在引用提供的SQL语句,使用了SUM(day_growth)来计算每个组day_growth列的总和,同时使用GROUP BY create_time将结果按create_time进行分组,再使用ORDER BY create_time DESC对结果按create_time降序排序。这样,您将获得按照create_time分组并计算每个组的day_growth总和的结果。 而在引用和引用提供的SQL语句,没有正确使用聚合函数GROUP BY子句。在MySQL,如果SELECT语句包含了GROUP BY子句,那么除了聚合函数之外的列必须在GROUP BY子句列出。否则,将会报错。 所以,引用的错误提示是因为day_growth列既没有出现在GROUP BY子句,也没有使用聚合函数进行计算。而引用的SQL语句虽然使用了GROUP BY子句,但是没有使用任何聚合函数,这也是不正确的使用方式。 综上所述,正确的做法是在GROUP BY子句列出要用于分组的列,并使用聚合函数对其他列进行计算。如需按照create_time分组并计算day_growth的总和,可以使用类似于引用的SQL语句。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [MySQL笔记-group by和聚合函数的使用](https://blog.csdn.net/qq78442761/article/details/123626662)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值