小结"/>
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
参考:
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
结果
参考:.html
更多推荐
MySQL中 group by 1, order by 1 语句是什么意思和group by+聚合函数用法小结
发布评论