再开发中遇到的一些问题,简单的做个总结
1.Group by 语法
SELECT column-names
FROM table-name
WHERE condition
GROUP BY column-names
ORDER BY column-names
Group by必须出现在where条件后面和order by之前
2.Group by中出现在select条件中的非聚合表达式必须出现在Group by 条件后面;
这个很好理解,因为分组Group by必须确保分组是唯一的;
3.Group by 和having一起使用
having用于对Group by的分组进行过滤,举个例子,而where则对所有的行先做筛选;
员工表结构如下所示
id name dept salary edlevel hiredate
1 张三 开发部 2000 3 2009-10-11
2 李四 开发部 2500 3 2009-10-01
3 王五 设计部 2600 5 2010-10-02
4 王六 设计部 2300 4 2010-10-03
5 马七 设计部 2100 4 2010-10-06
6 赵八 销售部 3000 5 2010-10-05
7 钱九 销售部 3100 7 2010-10-07
8 孙十 销售部 3500 7 2010-10-06
1>查找查找雇员数超过2个的部门的最高和最低薪水:
SELECT dept ,MAX(salary) AS MAXIMUM ,MIN(salary) AS MINIMUM
FROM STAFF
GROUP BY dept
HAVING COUNT(*) > 2
ORDER BY dept
逻辑是先分组,分组之后再执行having中的条件,开发部有两个人,不满足要求,设计部和销售部都大于2,结果就返回这两个部门的最高和最低薪水;
2>查找雇员平均工资大于3000的部门的最高薪水和最低薪水
SELECT dept,MAX(salary) AS MAXIMUM,MIN(salary) AS MINIMUM
FROM STAFF
GROUP BY dept
HAVING AVG(salary) > 3000
ORDER BY dept
执行逻辑:先分组,分组之后计算每组的平均工资,大于3000的,之后再求这组的max和min,之后返回