SQL---分组函数和分组查询

```cpp
#分组函数

说明:分组函数往往用于实现将一组数据进行统计计算,
最终得到一个值,又称为聚合函数或统计函数

分组函数有:
sum():求和
avg():求平均数
max():求最大值
min():求最小值
count():计算非空字段值的个数

#查询员工信息表中,所有员工的工资和、工资平均值、最低工资、最高工资、有工资的个数

SELECT SUM(salary),AVG(salary),MIN(salary),
MIN(salary),COUNT(salary) 
FROM `employees`;

#查询emp表中记录数:

SELECT COUNT(`employee_id`) FROM `employees`;

#查询emp表中有佣金的人数:

SELECT COUNT(salary) FROM `employees`;

#查询emp表中月薪大于2500的人数:

SELECT COUNT(salary) FROM employees WHERE salary>2500;

#查询有领导的人数:

SELECT COUNT(`manager_id`) FROM `employees`;

#count的补充介绍

#1、统计结果集的行数,推荐使用count(*)
SELECT COUNT(*) FROM `employees`;
SELECT COUNT(*) FROM `employees` WHERE `department_id`=30;
 
#搭配distinct实现去重的统计

#需求:查询有员工的部门个数

SELECT COUNT(DISTINCT department_id) 
FROM `employees`; 

#分组查询

语法:

select 查询列表
from  表名
where 筛选条件
group by 分组列表
having 分组后筛选
order by 排序列表

执行顺序:
1、from子句
2、where子句
3、group by 子句
4、having
5、select 子句
6、order by 子句

特点:
1、查询列表往往是 分组函数和被分组的字段
2、分组查询中的筛选分为两类:
分组前筛选->原始表->where->group by 的前面
分组后筛选->分组后的表->having->group by 的后面



#1)简单的分组
#查询每个工种的员工平均工资

SELECT AVG(`salary`),job_id
FROM `employees`
GROUP BY job_id;

#查询每个领导的手下人数
SELECT COUNT(*),`manager_id`
FROM `employees`
WHERE `manager_id` IS NOT NULL;
GROUP BY `manager_id`;

2)可以实现分组前的筛选
案例1:查询邮箱中包含a字符的 每个部门的最高工资
SELECT AVG(salary) 最高工资,department_id
FROM `employees`
WHERE email LIKE '%a%'
GROUP BY `department_id`;

案例2:查询有奖金的每个领导手下员工的平均工资
SELECT AVG(salary) 平均工资,manager_id
FROM `employees`
WHERE `commission_pct` IS NOT NULL
GROUP BY `manager_id`;


3)可以实现分组后的筛选

案例1:查询哪个部门的员工个数>5

SELECT COUNT(*) 员工个数,`department_id`
FROM `employees`
GROUP BY `department_id`
HAVING COUNT(*)>5;

案例2:每个工种有奖金的员工的最高工资>12000的工种编号和最高工资

SELECT job_id,MAX(salary)
FROM `employees`
WHERE `commission_pct` IS NOT NULL
GROUP BY job_id
HAVING MAX(salary)>12000;

案例3:领导编号>102的每个领导手下的最低工资大于5000的领导编号和最低工资

SELECT MIN(salary) 最低工资,manager_id
FROM `employees`
WHERE `manager_id`>102
GROUP BY manager_id
HAVING MIN(salary)>5000;

4)可以实现排序

案例:每个工种有奖金的员工的最高工资>6000的工种编号和最高工资,按最高工资升序

SELECT MAX(salary) 最高工资,job_id
FROM `employees`
WHERE `commission_pct` IS NULL
GROUP BY job_id
HAVING MAX(salary)>6000
ORDER BY MAX(salary) ASC;
5)按多个字段分组

案例:查询每个工种每个部门的最低工资,并按最低工资降序

SELECT MIN(salary) 最低工资,job_id,department_id
FROM `employees`
GROUP BY job_id,department_id
ORDER BY MIN(salary) DESC;

全部评论

相关推荐

仁者伍敌:牛子这些人还会点一个自动回复,boss都不带回复的
点赞 评论 收藏
分享
避坑恶心到我了大家好,今天我想跟大家聊聊我在成都千子成智能科技有限公司(以下简称千子成)的求职经历,希望能给大家一些参考。千子成的母公司是“同创主悦”,主要经营各种产品,比如菜刀、POS机、电话卡等等。听起来是不是有点像地推销售公司?没错,就是那种类型的公司。我当时刚毕业,急需一份临时工作,所以在BOSS上看到了千子成的招聘信息。他们承诺无责底薪5000元,还包住宿,这吸引了我。面试的时候,HR也说了同样的话,感觉挺靠谱的。于是,我满怀期待地等待结果。结果出来后,我通过了面试,第二天就收到了试岗通知。试岗的内容就是地推销售,公司划定一个区域,然后你就得见人就问,问店铺、问路人,一直问到他们有意向为止。如果他们有兴趣,你就得摇同事帮忙推动,促进成交。说说一天的工作安排吧。工作时间是从早上8:30到晚上18:30。早上7点有人叫你起床,收拾后去公司,然后唱歌跳舞(销售公司都这样),7:55早课(类似宣誓),8:05同事间联系销售话术,8:15分享销售技巧,8:30经理训话。9:20左右从公司下市场,公交、地铁、自行车自费。到了市场大概10点左右,开始地推工作。中午吃饭时间大约是12:00,公司附近的路边盖饭面馆店自费AA,吃饭时间大约40分钟左右。吃完饭后继续地推工作,没有所谓的固定中午午休时间。下午6点下班后返回公司,不能直接下班,需要与同事交流话术,经理讲话洗脑。正常情况下9点下班。整个上班的一天中,早上到公司就是站着的,到晚上下班前都是站着。每天步数2万步以上。公司员工没有自己的工位,百来号人挤在一个20平方米的空间里听经理洗脑。白天就在市场上奔波,公司的投入成本几乎只有租金和工资,没有中央空调。早上2小时,晚上加班2小时,纯蒸桑拿。没有任何福利,节假日也没有3倍工资之类的。偶尔会有冲的酸梅汤和西瓜什么的。公司的晋升路径也很有意思:新人—组长—领队—主管—副经理—经理。要求是业绩和团队人数,类似传销模式,把人留下来。新人不能加微信、不能吐槽公司、不能有负面情绪、不能谈恋爱、不能说累。在公司没有任何坐的地方,不能依墙而坐。早上吃早饭在公司外面的安全通道,未到上班时间还会让你吃快些不能磨蹭。总之就是想榨干你。复试的时候,带你的师傅会给你营造一个钱多事少离家近的工作氛围,吹嘘工资有多高、还能吹自己毕业于好大学。然后让你早点来公司、无偿加班、抓住你可能不会走的心思进一步压榨你。总之,大家在找工作的时候一定要擦亮眼睛,避免踩坑!———来自网友
qq乃乃好喝到咩噗茶:不要做没有专业门槛的工作
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务