语法规范:
1、GROUP BY子句中列出的每一列都必须是检索列或有效的表达式(但不能是聚集函数)。如果在SELECT中使用表达式,则必须在GROUP BY子句中指定相同的表达式。不能使用别名。
2、除聚集计算语句外,SELECT语句中的每一列都必须在GROUP BY子句中给出。
基础理解:就是对指定字段做一个去重,
但是去重之后可能会出现一个单元格多个值的情况。
https://blog.csdn.net/shaofei63/article/details/42800793?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1.control
这个博客讲的很详细,大概意思就是:如果需要在select中显示一行多值的列的情况,那么只能使用聚集函数。
语法理解2:过滤分组。
SELECT vend_id, COUNT() AS num_prods
FROM Products
WHERE prod_price >= 4
GROUP BY vend_id
HAVING COUNT() >= 2;
having 和where的区别
这里有另一种理解方法,WHERE在数据分组前进行过滤,HAVING在数据分组后进行过滤。
题目:
求第N大工资
select nsalary from employee group by salary order by salary desc limit n-1 offset 1;