聚合函数及分组查询英文测试题
04数据库——数据库表单查询(where,分组,聚合函数,筛选,去重,排序)、多表查询、子查询
04数据库——数据库表单查询(where ,分组,聚合函数,筛选,去重,排序)、多表查询、⼦查询前期表准备('tank','male',73,'20140701','teacher',3500,401,1),('owen','male',28,'20121101','teacher',2100,401,1),('jerry','female',18,'20110211','teacher',9000,401,1),('nick','male',18,'19000301','teacher',30000,401,1),('sean','male',48,'20101111','teacher',10000,401,1),('歪歪','female',48,'20150311','sale',3000.13,402,2),#以下是销售部门('丫丫','female',38,'20101101','sale',2000.35,402,2),('丁丁','female',18,'20110312','sale',1000.37,402,2),('星星','female',18,'20160513','sale',3000.29,402,2),('格格','female',28,'20170127','sale',4000.33,402,2),('张野','male',28,'20160311','operation',10000.13,403,3), #以下是运营部门('程咬⾦','male',18,'19970312','operation',20000,403,3),('程咬银','female',18,'20130311','operation',19000,403,3),('程咬铜','male',18,'20150411','operation',18000,403,3),('程咬铁','female',18,'20140512','operation',17000,403,3);#ps :如果在windows 系统中,插⼊中⽂字符,select 的结果为空⽩,可以将所有字符编码统⼀设置成gbk 创建表,插⼊数据⼀、语法的执⾏顺序select * from emp\G;当表字段特别多的时候 结果的排版可能会出现混乱的现象 你可以在查询语句加\G 来规范查询结果# 语法顺序select fromwhere group by (having)# 再识执⾏顺序from wheregroup by (having)select#完整版sql 语句的查询select distinct post,avg(salary)from table1 where id > 1group by posthaving avg(salary) > 1000order by avg(salary)limit 5,5⼆、where 约束条件"""模糊匹配 like%:匹配多个任意字符 _:匹配⼀个任意字符三、group by 分组1.分组前戏 ——设置严格模式select * from emp group by post; # 报错select id,name,sex from emp group by post; # 报错select post from emp group by post; # 获取部门信息#查询详细信息报错,只能查询到分组的信息,说明设置成功强调:只要分组了,就不能够再“直接”查找到单个数据信息了,只能获取到组名2.聚合函数 max min avg sum count 以组为单位统计组内数据>>>聚合查询(聚集到⼀起合成为⼀个结果)如果⼀张表没有写group by 默认所有的数据就是⼀组#在分组后,即select 后⾯或者having 后⾯才能使⽤# 每个部门的最⾼⼯资select post,max(salary) from emp group by post;PS:给字段取别名(as 也可以省略,但是⼀般不要这样⼲)select post as 部门,max(salary) as 最⾼⼯资 from emp group by post;# 每个部门的最低⼯资select post,min(salary) from emp group by post;# 每个部门的平均⼯资select post,avg(salary) from emp group by post;# 每个部门的⼯资总和select post,sum(salary) from emp group by post;# 每个部门的⼈数总数select post,count(id) from emp group by post;在统计分组内个数的时候,填写任意⾮空字段都可以完成计数,推荐使⽤能够⾮空且唯⼀标识数据的字段,⽐如id 字段# 聚合函数max min sum count avg 只能在分组之后才能使⽤,也就是紧跟着select ⽤或者紧跟着having (分组后的⼆次where )select id,name,age from emp where max(salary) > 3000; # 报错!select max(salary) from emp;# 正常运⾏,不分组意味着每⼀个⼈都是⼀组,等运⾏到max(salary)的时候已经经过where,group by操作了,只不过我们都没有写这些条件3.group_concat 和 concatgroup_concat(分组之后⽤)不仅可以⽤来显⽰除分组外字段还有拼接字符串的作⽤1.group_concat 显⽰分组外字符 拼接字符串#查询分组之后的部门名称和每个部门下所有⼈的姓名select post,group_concat(name) from emp group by post;#在每个⼈的名字前后拼接字符select post,group_concat('D_',name,"_SB") from emp group by post;#group_concat()能够拿到分组后每⼀个数据指定字段(可以是多个)对应的值select post,group_concat(name,": ",salary) from emp group by post;2.concat拼接 as语法使⽤(不分组时⽤)就是⽤来拼接字符串达到更好的显⽰效果select name as 姓名,salary as 薪资from emp;select concat("NAME: ",name) as 姓名,concat("SAL: ",salary) as 薪资from emp;# 如果拼接的符号是统⼀的可以⽤ concat_wsselect concat_ws(':',name,age,sex) as info from emp;⼩技巧:concat就是⽤来帮你拼接数据,不分组情况下使⽤group_concat 分组之后使⽤,可以拼接数据也可以⽤来显⽰其他字段信息# 补充as语法既可以给字段起别名也可以给表起select emp.id, from emp as t1; # 报错因为表名已经被你改成了t1select t1.id, from emp as t1;3.查询四则运算# 查询每个⼈的年薪select name,salary*12 as annual_salary from emp;select name,salary*12 annual_salary from emp; # as可以省略4.练习题"""View Code8、统计各部门年龄在30岁以上的员⼯平均⼯资四、having 筛选跟where是⼀模⼀样的也是⽤来筛选数据但是having是跟在group by之后的where是对整体数据做⼀个初步的筛选⽽having是对分组之后的数据再进⾏⼀次针对性的筛选1、统计各部门年龄在30岁以上的员⼯平均⼯资,并且保留平均⼯资⼤于10000的部门select post,avg(salary) from emp where age > 30 group by post where avg(salary) > 10000; # 报错select post,avg(salary) from empwhere age >= 30group by posthaving avg(salary) > 10000;强调:having必须在group by后⾯使⽤select * from emp having avg(salary) > 10000; # 报错五、distinct 去重# 对有重复的展⽰数据进⾏去重操作#去重⼀定要满⾜数据是⼀模⼀样的情况下才能达到去重的效果#如果你查询出来的数据中包含主键字段,那么不可能去重成功#只要有⼀个不⼀样都不能算是的重复的数select distinct id,age from emp; #去重失败,id不⼀样,即使age⼀样也没⽑⽤select distinct post from emp; #成功六、limit 限制条数# 限制展⽰条数select * from emp limit 5; # 只展⽰数据的五条# 分页显⽰select * from emp limit 5,5; #第6条开始,往后展⽰5条当limit只有⼀个参数的时候表⽰的是只展⽰⼏条当limit有两个参数的时候第⼀个参数表⽰的起始位置,是索引第⼆个参数表⽰从起始位置开始往后展⽰的条数# 查询⼯资最⾼的⼈的详细信息select * from emp order by salary desc limit 1;七、regexp 正则# 在编程中只要看到reg开头的基本上都是跟正则相关select * from emp where name regexp '^j.*(n|y)$';re模块中findall:分组优先会将括号内正则匹配到的优先返回match:从头开始匹配匹配到⼀个就直接返回res = match('^j.*n$','jason')print(res.group())search:整体匹配匹配到⼀个就直接返回⼋、order by 排序select * from emp order by salary asc; #默认升序排select * from emp order by salary desc; #降序排select * from emp order by age desc; #降序排#先按照age 降序排,在年纪相同的情况下再按照薪资升序排select * from emp order by age desc,salary asc;# 统计各部门年龄在10岁以上的员⼯平均⼯资,并且保留平均⼯资⼤于1000的部门,然后对平均⼯资进⾏排序select post,avg(salary) from empwhere age > 10group by posthaving avg(salary) > 1000order by avg(salary);九、多表查询(203,'运营');insert into emp(name,sex,age,dep_id) values('jason','male',18,200),('egon','female',48,201),('kevin','male',38,201),('nick','female',28,202),('owen','male',18,200),('jerry','female',18,204);# 当初为什么我们要分表,就是为了⽅便管理,在硬盘上确实是多张表,但是到了内存中我们应该把他们再拼成⼀张表进⾏查询才合理创建表当初为什么我们要分表,就是为了⽅便管理,在硬盘上确实是多张表,但是到了内存中我们应该把他们再拼成⼀张表进⾏查询才合理#笛卡尔积select * from emp,dep; # 左表⼀条记录与右表所有记录都对应⼀遍,即10*4=40条 >>>笛卡尔积# 将所有的数据都对应了⼀遍,虽然不合理但是其中有合理的数据,现在我们需要做的就是找出合理的数据# 查询员⼯及所在部门的信息select * from emp,dep where emp.dep_id = dep.id;#查询部门为技术部的员⼯及部门信息select * from emp,dep where emp.dep_id = dep.id and = '技术';其实将两张表关联到⼀起的操作,有专门对应的⽅法:内连接、左连接、右链接、全连接# 1、内连接:只链接两张表有对应关系的记录select * from emp inner join dep on emp.dep_id = dep.id;select * from emp inner join dep on emp.dep_id = dep.idwhere = "技术";# 2、左连接: 在内连接的基础上保留左表没有对应关系的记录,没有部门信息null 补全select * from emp left join dep on emp.dep_id = dep.id;# 3、右连接: 在内连接的基础上保留右表没有对应关系的记录,没有员⼯信息null 补全select * from emp right join dep on emp.dep_id = dep.id;# 4、全连接:在内连接的基础上保留左、右⾯表没有对应关系的的记录,空⽩全⽤null 补全# 只要将左连接和右连接的sql 语句中间加⼀个union 连起来就变成全连接select * from emp left join dep on emp.dep_id = dep.idunionselect * from emp right join dep on emp.dep_id = dep.id;⼗、⼦查询就是将⼀个查询语句的结果⽤括号括起来当作另外⼀个查询语句的条件去⽤,括号⾥⾯语句末尾不能加分号#最新⽇期作为条件select name,hire_date,post from emp where hire_date in (select max(hire_date) from emp group by post) ;# 查询平均年轻在25岁以上的部门名⽅法⼀:⼦查询select name from dep where id in(select dep_id from emp group by dep_id having avg(age)>25);⽅法⼆:连表查询select from emp inner join dep on emp.dep_id = dep.idgroup by having avg(age) > 25;"""记住⼀个规律,表的查询结果可以作为其他表的查询条件,也可以通过其别名的⽅式把它作为⼀张虚拟表去跟其他表做关联查询"""select * from emp inner join dep on emp.dep_id = dep.id;⼗⼀、exist(了解)EXISTS关字键字表⽰存在。
mysql 多表连接 聚合函数题库
mysql 多表连接聚合函数题库以下是一个示例的MySQL多表连接和聚合函数的题库。
1. 给出两个表格"orders"和"customers",表格"orders"包含以下列:order_id,customer_id和order_date;表格"customers"包含以下列:customer_id,customer_name和customer_city。
写一个SQL查询语句,获取每个城市有多少个订单。
```mysqlSELECT customers.customer_city, COUNT(orders.order_id) AS num_ordersFROM ordersJOIN customers ON orders.customer_id = customers.customer_id GROUP BY customers.customer_city;```2. 继续使用上述表格"orders"和"customers",写一个SQL查询语句,获取每个顾客的订单数量以及他们的总订单数量。
```mysqlSELECT customers.customer_id, customers.customer_name, COUNT(orders.order_id) AS num_orders,SUM(COUNT(orders.order_id)) OVER () AS total_orders FROM ordersJOIN customers ON orders.customer_id = customers.customer_id GROUP BY customers.customer_id, customers.customer_name; ```3. 给出两个表格"orders"和"order_details",表格"orders"包含以下列:order_id,customer_id和order_date;表格"order_details"包含以下列:order_id,product_id和quantity。
高频sql 50 题目 进阶版
高频sql 50 题目进阶版高频SQL 50题进阶版一、聚合函数与分组1.计算每个部门的员工平均薪资。
2.计算每个部门员工的最大和最小薪资。
3.计算每个部门员工的数量。
二、子查询与联接4.找出与“张三”共事的所有同事的姓名。
5.查询出在南京的所有部门中的所有员工及其工资,并按照工资的升序排列。
6.使用JOIN语句连接两个表,获取员工的姓名和其对应的薪资。
三、窗口函数7.使用窗口函数计算每个员工的“本月薪资”和“上月薪资”。
8.计算每个员工的“季度奖金”,基于其所在部门的平均季度销售额。
9.使用窗口函数为每个员工的工资计算一个“涨幅”列,表示其工资与上一级别工资的差值。
四、索引与优化10.分析某个表的索引结构,并提出优化建议。
11.使用EXPLAIN分析某个查询的执行计划,并提出优化建议。
12.设计一个索引,优化某个查询的性能。
五、存储过程与触发器13.创建一个存储过程,实现根据部门编号查询部门员工信息的功能。
14.创建一个触发器,在员工信息更新时自动更新其所在部门的最新员工数量。
15.分析存储过程和函数的区别。
六、事务处理与并发16.描述事务的ACID属性。
17.分析一个事务中的SQL语句,确保其满足ACID属性。
18.设计一个并发控制机制,确保多个事务对同一数据的访问不会产生冲突。
七、性能调优19.分析某个查询的性能瓶颈,并提出优化建议。
20.使用EXPLAIN进行查询性能分析,提出优化策略。
21.对数据库性能进行监控和预警。
八、数据库设计22.设计一个简单的数据库结构,包含用户表、订单表和订单明细表,并指出各表之间的关系。
23.分析数据库规范化与反规范化的优缺点。
24.设计一个数据库模式,满足某公司的业务需求,并解释其设计理由。
九、数据库安全25.分析数据库的安全风险,并提出相应的防范措施。
26.设计一个用户权限管理机制,确保不同用户只能访问其权限范围内的数据。
27.描述数据库备份的重要性及常用的备份策略。
Oracle基础练习题及答案(聚合函数)
分组函数1.查询公司员工工资的最大值,最小值,平均值,总和select max(sal),min(sal),avg(sal),sum(sal) from emp;2.查询各job的员工工资的最大值,最小值,平均值,总和select job,max(sal),min(sal),avg(sal),sum(sal) from emp group by job;3.选择具有各个job的员工人数(提示:对job进行分组)select job,count(ename) from emp group by job;4.查询员工最高工资和最低工资的差距(DIFFERENCE)select max(sal)-min(sal) from emp;5.查询各个管理者手下员工的最低工资,其中最低工资不能低于800,没有管理者的员工不计算在内select a.mgr,min(a.sal) from emp a,emp b where a.mgr=b.empno group by a.mgr;6.查询所有部门的名字dname,所在位置loc,员工数量和平均工资select dname,loc,count(ename),avg(sal) from emp a,dept b where a.deptno(+)=b.deptno group by dname,loc;7.查询公司的人数,以及在1980-1987年之间,每年雇用的人数,结果类似下面的格式total 1980 1981 1982 198730 3 4 6 7select distinct(select count(ename) from emp) "total",(select count(ename) from emp where hiredate>=to_date('19800101','yyyymmdd') and hiredate<to_date('19810101','yyyymmdd')) "1980",(select count(ename) from emp where hiredate>=to_date('19810101','yyyymmdd') and hiredate<to_date('19820101','yyyymmdd')) "1981",(select count(ename) from emp where hiredate>=to_date('19820101','yyyymmdd') and hiredate<to_date('19830101','yyyymmdd')) "1982",(select count(ename) from emp where hiredate>=to_date('19870101','yyyymmdd') and hiredate<to_date('19880101','yyyymmdd')) "1987"from emp;。
Excel操作练习题精选英文版
Excel操作练习题精选英文版Document Title: Selected Excel Practice ExercisesIn this document, we have compiled a variety of Excel practice exercises to help you enhance your skills in using this powerful tool. These exercises cover a range of functions and features in Excel to test and improve your proficiency.1. Basic Formulas:- Sum function- Average function- Count function2. Formatting:- Cell formatting (font style, color, borders)- Conditional formatting3. Data Analysis:- Sorting data- Filtering data- Using pivot tables4. Charts and Graphs:- Creating a bar chart- Generating a pie chart- Designing a line graph5. Advanced Functions:- VLOOKUP function- IF function- CONCATENATE function6. Data Validation:- Setting up drop-down lists - Inputting validation rules7. Macros:- Recording a simple macro- Running a macro8. Data Import and Export:- Importing data from external sources- Exporting data to different file formats9. Collaboration:- Sharing workbooks with others- Tracking changes made by multiple users10. Tips and Tricks:- Using keyboard shortcuts- Customizing the Excel interface- Protecting your workbook with a passwordThese exercises are designed to challenge your Excel skills and expand your knowledge of its functionalities. Practice each exercise thoroughly to master the concepts and techniques demonstrated. By completing these exercises, you will become more proficient in using Excel for various tasks and projects.Happy practicing!。
分组查询练习题
分组查询练习题数据库中的分组查询(Group By)是一种功能强大的技术,可以根据指定的列对数据进行分组,并对每个分组进行聚合操作。
分组查询可以帮助我们更加灵活地获取数据,并进行统计和分析。
本文将通过一些练习题来帮助读者更深入地理解和应用分组查询。
练习题1:统计每个部门的员工数量假设我们有一个名为employee的表,其中包含员工的信息,包括员工姓名、工号和所在部门。
我们希望统计每个部门的员工数量。
```sqlSELECT department, COUNT(*) AS employee_countFROM employeeGROUP BY department;```上述查询中,我们使用了COUNT(*)函数对每个部门的员工数量进行统计,并使用AS关键字给统计结果命名为employee_count。
最后通过GROUP BY关键字将结果按照部门进行分组。
练习题2:计算每个部门的平均工资在上一个练习题的基础上,我们希望计算每个部门的平均工资。
```sqlSELECT department, AVG(salary) AS average_salaryFROM employeeGROUP BY department;```以上查询中,我们使用了AVG函数对每个部门的工资进行平均值计算,并使用AS关键字给统计结果命名为average_salary。
同样地,通过GROUP BY关键字将结果按照部门进行分组。
练习题3:查找每个部门的最高和最低工资在这个练习题中,我们希望查找每个部门的最高和最低工资,以便对部门工资的差异进行分析。
```sqlSELECT department, MAX(salary) AS max_salary, MIN(salary) AS min_salaryFROM employeeGROUP BY department;```上述查询中,我们使用了MAX和MIN函数分别计算每个部门的最高和最低工资,并使用AS关键字给统计结果命名为max_salary和min_salary。
SQL命令练习题及答案
SQL命令练习题一、聚合函数练习1、统计<学生信息表>,统计共有多少个学生SELECT COUNT (*) AS 学生数量 FROM 学生信息2、统计<学生信息表>,统计年龄大于 20 岁的学生有多少个SELECT COUNT(*) AS 学生数量 FROM 学生信息 WHERE (2008-YEAROFBIRTH)>203、统计<学生信息表>,统计入学时间在 1980 年至 1982 年的学生人数SELECT COUNT(*) AS 学生数量 FROM 学生信息 WHERE ENROLLMENT BETWEEN '1998-01-01' AND '2003-12-30'对比以下查询方式,看看有何不同,为什么?SELECT COUNT(*) AS 学生数量 FROM 学生信息 WHERE ENROLLMENT BETWEEN '1998' AND '2003' 4、统计<学生选修信息表>,统计学号为"S001"的学生的平均成绩SELECT AVG(SCORE) AS 平均成绩 FROM 学生选修信息 WHERE SNO='S001'5、统计<学生选修信息表>,统计学号为"S001"的学生的总成绩SELECT SUM(SCORE) AS 总成绩 FROM 学生选修信息 WHERE SNO ='S001'6、统计<学生选修信息表>,查询课程号为”C001”的课程的最高成绩SELECT MAX(SCORE) AS 最高成绩 FROM 学生选修信息 WHERE CNO='C001'7、统计<学生信息表>,查询所有学生中的最大年龄是多少SELECT 2008-MIN(YEAROFBIRTH) AS 最大年龄 FROM 学生信息二、单表查询练习1、查询<学生信息表>,查询学生"张三"的全部基本信息SELECT * FROM 学生信息 WHERE SNAME='张三'2、查询<学生信息表>,查询学生"张三"和”李四”的基本信息SELECT * FROM 学生信息 WHERE SNAME='张三' OR SNAME='李四'3、查询<学生信息表>,查询姓"张"学生的基本信息SELECT * FROM 学生信息 WHERE SNAME LIKE '张%'4、查询<学生信息表>,查询姓名中含有"四"字的学生的基本信息SELECT * FROM 学生信息 WHERE SNAME LIKE '%四%'5、查询<学生信息表>,查询姓名长度为三个字,姓“李”,且最后一个字是“强”的全部学生信息。
sql测试题和答案
sql测试题和答案以下是一些常见的SQL测试题及其答案。
这些题目旨在考察SQL 基本知识和查询能力。
希望对你的SQL学习和提升有所帮助。
1. 给定一个名为"Students"的表格,包含学生的姓名、年龄和分数三个字段。
写一个SQL查询,按照分数从高到低排列,显示学生姓名和分数。
答案:SELECT Name, ScoreFROM StudentsORDER BY Score DESC;2. 给定一个名为"Customers"的表格,包含顾客的姓名、所在城市和消费金额三个字段。
写一个SQL查询,显示每个城市的总消费金额,结果按照金额从高到低排序。
答案:SELECT City, SUM(Expense) as TotalExpenseFROM CustomersGROUP BY CityORDER BY TotalExpense DESC;3. 给定一个名为"Orders"的表格,包含订单号、顾客姓名和订单日期三个字段。
写一个SQL查询,显示每个顾客最近一次的订单日期。
答案:SELECT CustomerName, MAX(OrderDate) as LastOrderDateFROM OrdersGROUP BY CustomerName;4. 给定一个名为"Employees"的表格,包含员工的姓名、职位和入职日期三个字段。
写一个SQL查询,显示每个职位的最早入职员工姓名。
答案:SELECT Position, MIN(StartDate) as EarliestEmployeeFROM EmployeesGROUP BY Position;5. 给定一个名为"Products"的表格,包含产品名称、价格和所属分类三个字段。
写一个SQL查询,显示每个分类中价格最高的产品。
答案:SELECT Category, MAX(Price) as HighestPriceFROM ProductsGROUP BY Category;这些题目涵盖了SQL中的基本查询、排序、分组和聚合等操作。
mysql 多表连接 聚合函数题库
mysql 多表连接聚合函数题库MySQL 多表连接和聚合函数题库在使用MySQL数据库进行数据查询时,经常会遇到需要连接多个表并进行聚合计算的情况。
本文将介绍MySQL中多表连接和聚合函数的使用,并提供一些练习题供读者练习。
一、多表连接1. 内连接(INNER JOIN)内连接是指返回两个表中满足连接条件的记录。
语法如下:```sqlSELECT *FROM table1INNER JOIN table2ON table1.column = table2.column;```2. 左连接(LEFT JOIN)左连接是指返回左表中的所有记录,以及满足连接条件的右表记录。
语法如下:```sqlSELECT *FROM table1LEFT JOIN table2ON table1.column = table2.column;```3. 右连接(RIGHT JOIN)右连接是指返回右表中的所有记录,以及满足连接条件的左表记录。
语法如下:```sqlSELECT *FROM table1RIGHT JOIN table2ON table1.column = table2.column;```4. 全连接(FULL JOIN)全连接是指返回左表和右表中的所有记录,不管是否满足连接条件。
语法如下:```sqlSELECT *FROM table1FULL JOIN table2ON table1.column = table2.column;```二、聚合函数MySQL提供了一些聚合函数来进行数据的汇总计算,包括SUM、AVG、COUNT、MAX、MIN等。
1. SUM函数:计算某一列的总和。
```sqlSELECT SUM(column)FROM table;```2. AVG函数:计算某一列的平均值。
```sqlSELECT AVG(column)FROM table;```3. COUNT函数:计算某一列的记录数。
MySQL分组查询和聚合函数
MySQL分组查询和聚合函数概述相信我们经常会遇到这样的场景:想要了解双⼗⼀天猫购买化妆品的⼈员中平均消费额度是多少(这可能有利于对商品价格区间的定位);或者不同年龄段的化妆品消费占⽐是多少(这可能有助于对商品备货量的预估)。
这个时候就要⽤到分组查询,分组查询的⽬的是为了把数据分成多个逻辑组(购买化妆品的⼈员是⼀个组,不同年龄段购买化妆品的⼈员也是组),并对每个组进⾏聚合计算的过程:。
分组查询的语法格式如下:select cname, group_fun,... from tname [where condition]group by group_expression [having group_condition];说明⼀下:1、group_fun 代表聚合函数,是指对分组的数据进⾏聚合计算的函数。
2、group_expression 代表分组表达式,允许多个,多个之间使⽤逗号隔开。
3、group_condition 分组之后,再对分组后的数据进⾏条件过滤的过程。
4、分组语法中,select后⾯出现的字段要么是group by后⾯的字段,要么是聚合函数的列,其他类型会报异常,我们下⾯的内容中会详细说明。
说分组之前,先来看看聚合函数,聚合函数是分组查询语法格式中重要的⼀部分。
我们经常需要汇总数据⽽不⽤把它们实际检索出来,所以MySQL提供了专门的函数。
使⽤这些函数,可⽤于计算我们需要的数据,以便分析和⽣成报表。
聚合函数聚合函数有以下⼏种。
函数说明AVG()返回指定字段的平均值COUNT()返回查询结果⾏数MAX()返回指定字段的最⼤值 MIN()返回指定字段的最⼩值SUM()返回指定字段的求和值AVG()函数AVG()通过对表中⾏数计数并计算特定列值之和,求得该列的平均值。
AVG()可⽤来返回所有列的平均值,也可以⽤来返回特定列或⾏的平均值。
下⾯⽰例返回⽤户表中⽤户的平均年龄:mysql> select * from user2;+----+--------+------+----------+-----+| id | name | age | address | sex |+----+--------+------+----------+-----+| 1 | brand | 21 | fuzhou | 1 || 2 | helen | 20 | quanzhou | 0 || 3 | sol | 21 | xiamen | 0 || 4 | weng | 33 | guizhou | 1 || 5 | selina | 25 | NULL | 0 || 6 | anny | 23 | shanghai | 0 || 7 | annd | 24 | shanghai | 1 || 8 | sunny | NULL | guizhou | 0 |+----+--------+------+----------+-----+8 rows in setmysql> select avg(age) from user2;+----------+| avg(age) |+----------+| 23.8571 |+----------+1 row in set注意点:1、AVG()只能⽤来确定特定数值列的平均值。
pandas分组聚合题目
pandas分组聚合题目当涉及到Pandas的分组和聚合操作时,通常会使用`groupby`函数来实现。
下面是一个关于Pandas分组聚合的题目,我将从不同角度进行回答。
题目:假设我们有一个包含学生信息的数据集,其中包括学生姓名、班级、科目和成绩。
请使用Pandas回答以下问题:1. 每个班级的平均成绩是多少?2. 每个班级中每个科目的最高成绩是多少?3. 每个班级中每个科目的平均成绩是多少?4. 每个班级中每个科目的成绩总和是多少?5. 每个班级中成绩最高的学生是谁?回答:1. 要计算每个班级的平均成绩,我们可以使用`groupby`函数按班级进行分组,然后使用`mean`函数计算平均值。
代码如下:python.class_avg = df.groupby('班级')['成绩'].mean()。
2. 要计算每个班级中每个科目的最高成绩,我们可以使用`groupby`函数按班级和科目进行分组,然后使用`max`函数计算最大值。
代码如下:python.subject_max = df.groupby(['班级', '科目'])['成绩'].max()。
3. 要计算每个班级中每个科目的平均成绩,我们可以使用`groupby`函数按班级和科目进行分组,然后使用`mean`函数计算平均值。
代码如下:python.subject_avg = df.groupby(['班级', '科目'])['成绩'].mean()。
4. 要计算每个班级中每个科目的成绩总和,我们可以使用`groupby`函数按班级和科目进行分组,然后使用`sum`函数计算总和。
代码如下:python.subject_sum = df.groupby(['班级', '科目'])['成绩'].sum()。
SQL语句中的分组和聚合函数
SQL语句中的分组和聚合函数在数据库管理中,SQL(Structured Query Language,结构化查询语言)是一种常用的数据库管理语言。
SQL语句可以用来查询、插入、更新和删除数据等。
在SQL中,分组和聚合函数是SQL数据分析的重要部分。
一、SQL语句中的分组SQL语句中的分组是将相同的数据分为一组,以便更好地对数据进行分析和统计。
在SQL中,可以使用GROUP BY语句进行数据分组。
例如,以下SQL语句将员工表中的数据按照部门分组,并统计每个部门的员工数量:```SELECT department, COUNT(*)FROM employeeGROUP BY department;```上述SQL语句中,GROUP BY子句按照部门将数据分组,并使用COUNT函数统计每个部门的员工数量。
除了COUNT函数,还有SUM、AVG、MAX和MIN等聚合函数可以与GROUP BY子句一起使用。
例如,以下SQL语句将订单表中的数据按照客户id分组,并统计每个客户的订单总金额:```SELECT customer_id, SUM(order_amount)FROM orderGROUP BY customer_id;```在使用GROUP BY子句时,需要注意以下事项:1. 每个SELECT子句的列必须出现在GROUP BY子句中,或者作为聚合函数的参数。
2. 如果使用了聚合函数,则所有列必须出现在GROUP BY子句中,或者作为聚合函数的参数。
3. GROUP BY子句必须位于WHERE子句之后,ORDER BY子句之前。
二、SQL语句中的聚合函数SQL语句中的聚合函数是用于对数据进行汇总计算的函数,例如对数据求和、平均值、最大值或最小值等。
在SQL中,SUM、AVG、MAX和MIN是常用的聚合函数。
例如,以下SQL语句将员工表中的所有薪资进行求和:```SELECT SUM(salary)FROM employee;```除了SUM函数外,还有AVG、MAX和MIN等聚合函数可以使用。
hive sql测试选择题
hivesql测试选择题一、选择题(每题2分,共20分)1.HiveSQL中,用于选择数据表的语句是()。
A.SELECTB.INSERTC.UPDATED.DELETE正确答案:A.SELECT2.在HiveSQL中,如何使用WHERE子句过滤数据?()A.在SELECT语句后直接使用WHERE子句B.在FROM语句后使用WHERE子句C.在SELECT语句和FROM语句之间使用WHERE子句D.在WHERE子句中使用SELECT语句正确答案:A.在SELECT语句后直接使用WHERE子句3.HiveSQL中,如何使用聚合函数对数据进行统计?()A.使用COUNT函数统计行数B.使用SUM函数求和C.使用AVG函数求平均值D.使用GROUPBY子句对数据进行分组后再使用SUM函数求和正确答案:D.使用GROUPBY子句对数据进行分组后再使用SUM函数求和4.HiveSQL中,如何使用JOIN语句将多个表连接起来?()A.使用UNION操作符连接多个表B.使用WHERE子句连接多个表C.使用JOIN关键字将多个表按照共同字段连接起来D.使用IN操作符连接多个表正确答案:C.使用JOIN关键字将多个表按照共同字段连接起来5.在HiveSQL中,如何使用DISTINCT关键字去除重复数据?()A.在SELECT语句中使用DISTINCT关键字去除重复数据B.在FROM语句中使用DISTINCT关键字去除重复数据C.在WHERE语句中使用DISTINCT关键字去除重复数据D.在ORDERBY语句中使用DISTINCT关键字排序数据正确答案:A.在SELECT语句中使用DISTINCT关键字去除重复数据6.HiveSQL中,如何使用CASE语句进行条件判断?()A.使用IF语句进行条件判断B.使用CASEWHEN语句进行条件判断C.使用THEN关键字进行条件判断D.使用COALESCE函数进行条件判断正确答案:B.使用CASEWHEN语句进行条件判断7.HiveSQL中,如何使用LIMIT语句限制结果集的行数?()A.使用LIMIT关键字限制结果集的行数B.使用TOP关键字限制结果集的行数C.使用COUNT(*)函数统计行数并返回前N行数据D.使用ORDERBY语句对结果集进行排序后再使用LIMIT关键字限制行数正确答案:A.使用LIMIT关键字限制结果集的行数8.HiveSQL中,如何使用DATE_FORMAT函数将日期格式化?()A.使用CAST函数将日期转换为字符串格式B.使用DATE_FORMAT函数将日期格式化为指定格式的字符串C.使用TO_DATE函数将字符串转换为日期格式D.使用CONCAT函数将日期和字符串拼接起来正确答案:B.使用DATE_FORMAT函数将日期格式化为指定格式的字符串二、简答题(每题5分,共30分)请简述HiveSQL中SELECT语句的基本语法。
pandas分组聚合题目
pandas分组聚合题目好的,下面是一个关于Pandas分组聚合的题目:假设有一个包含学生姓名、科目和分数的数据表,数据如下:姓名科目分数。
Amy Math 80。
Bob Math 90。
Amy English 85。
Bob English 95。
Cathy Math 75。
Cathy English 80。
请你使用Pandas进行分组聚合,回答以下问题:1. 每个学生的平均分数是多少?2. 每个科目的平均分数是多少?3. 每个学生在每个科目上的最高分是多少?请注意,下面的回答将按照问题的顺序逐一给出。
1. 每个学生的平均分数:Amy的平均分数是 (80 + 85) / 2 = 82.5。
Bob的平均分数是 (90 + 95) / 2 = 92.5。
Cathy的平均分数是 (75 + 80) / 2 = 77.5。
2. 每个科目的平均分数:Math的平均分数是 (80 + 90 + 75) / 3 = 81.67。
English的平均分数是 (85 + 95 + 80) / 3 = 86.67。
3. 每个学生在每个科目上的最高分:Amy在Math上的最高分是 80。
Amy在English上的最高分是 85。
Bob在Math上的最高分是 90。
Bob在English上的最高分是 95。
Cathy在Math上的最高分是 75。
Cathy在English上的最高分是 80。
以上就是根据给定的数据进行分组聚合后得出的结果。
希望能够满足你的要求。
如果你还有其他问题,欢迎继续提问。
SQL的聚合函数及分组查询
SQL的聚合函数及分组查询SQL的聚合函数及分组查询要在这个世界上获得成功,就必须坚持到底:⾄死都不能放⼿。
countselect count(*) from students #底层优化了select count(1) from students #效果和*⼀样select count(age) from emp #慢,只统计⾮NULL的max / minselect max(score) max from scores #求该字段的最⼤值select min(score) min from scores #获取该字段的最⼩值select class,max(score) from scores group by class #配合分组使⽤sum / avgselect sum(score) from scores #求和select avg(score) from scores #求平均数分组 group by⽤于对查询的结果进⾏分组统计group by表⽰分组,having ⼦句类似where过滤返回的结果select class,max(score) from scores group by class #聚合函数配合分组使⽤这⾥的意思是从scores表中,查询班级class和最⾼成绩,按班级分组。
报错句分析:Invalid use of group function#select class,max(score) FROM scores where max(score) > 80 GROUP BY class;先过滤再分组是⾼效的,但where中不能使⽤聚合函数,所以这⾥我们应该使⽤having⼦句。
select class,max(score) FROM scores GROUP BY class having max(score) > 80;注意:这⾥是先查询分组完后,再执⾏having⼦句的过滤条件。
MySQL分组,聚合函数,连表查询,子查询
MySQL分组,聚合函数,连表查询,⼦查询>>>分组: set global sql_mode="strict_trans_tables,only_full_group_by"; 更改数据库模式,在分组后,只能显⽰被分组字段和使⽤聚合函数选取出来的字段. group by + group_concat 分组:类似于将⼀个班级的学⽣,按照性别或其他条件,分成若⼲个组,最终以⼩组为单位显⽰,如上图中,以post字段对表进⾏分组,若想在分组后,操作每个组内的数据,有两种⽅式,⼀种是通过聚合函数(max,min,avg,sum),⼀种是group_concat. 聚合函数(max,min,avg,sum) max:取每个组内某个字段值的最⼤值 min:取每个组内某个字段值的最⼩值 avg:求第个组的内某个字段值的平均值 sum:求每个组内某个字段值的和 group_concat:可以提取分组中的字段,并可以将值与值进⾏拼接显⽰. having:必须在group by 之后,作⽤是,对分组后的数据,进⾏再次筛选 如上图:求每个部门中薪资最⾼的⼈,且只保留薪资⼤于10000的⼈>>>连表查询 inner join:内连接:只取两张表有对应关系的记录 left join:左连接: 在内连接的基础上保留左表没有对应关系的记录 right join:右连接: 在内连接的基础上保留右表没有对应关系的记录 union:全连接:在内连接的基础上保留左、右⾯表没有对应关系的的记录>>>⼦查询 将表1的查询结果,做为表2的查询条件,即为⼦查询. 如图:查询员⼯jason所在的部门.。
连接及分组查询-练习题
1、查询雇员的编号、姓名、部门名称及部门位置SELECT e.empno,e.ename,d.dname,d.loc FROM emp e,dept dWHERE e.deptno=d.deptno2、查询每个雇员的姓名、工作、雇员的直接上级领导的姓名SELECT e.ename,e.job,c.ename FROM emp e, emp cWHERE e.mgr=c.empno(+)3、查询每个雇员的姓名、工作、雇员的直接上级领导的姓名及所在部门名称SELECT e.ename,e.job,c.ename,d.dname FROM emp e, emp c,dept dWHERE e.mgr=c.empno AND c.deptno=d.deptnoSELECT e.ename,e.job,c.ename,d.dname FROM emp e, emp c,dept dWHERE e.mgr=c.empno(+) AND e.deptno=d.deptno(+)说明:为什么使用 e.deptno=d.deptno(+)而不使用 c.deptno=d.deptno(+),因为e.mgr=c.empno(+) 左外连接将“KING”这条记录的拼好后,“KING”这条记录的c.deptno 字段为NULL,所以不能使用4、查询出每个雇员的姓名、工资、部门名称、工资在公司的等级及其领导的姓名及其工资所在公司的等级●选确定工资等级表的内容SELECT * FROM salgrade●分解:查询出每个雇员的姓名、工资、部门名称、工资所在公司的等级SELECT e.ename,e.sal,d.dname,s.gradeFROM emp e,dept d,salgrade sWHERE e.deptno=d.deptno(+) AND e.sal BETWEEN s.losal AND s.hisal●分解:其领导的姓名及工资所在公司的等级SELECT e.ename,e.sal,d.dname,s.grade,m.ename,m.sal,ms.gradeFROM emp e,dept d,salgrade s,emp m,salgrade msWHERE e.deptno=d.deptno(+)AND e.sal BETWEEN s.losal AND s.hisalAND (e.mgr=m.empno(+)) AND m.sal BETWEEN ms.losal AND ms.hisal 缺点:没有显示KING的记录信息改进:显示全部14条记录1:第五等级2:第四等级3:第三等级4:第二等级5:第一等级SELECT e.ename,e.sal,d.dname, DECODE(s.grade,1,'第5等级',2,'第4等级',3,'第3等级',4,'第2等级',5,'第1等级') sgrade,m.ename,m.sal, DECODE(ms.grade,1,'第5等级',2,'第4等级',3,'第3等级',4,'第2等级',5,'第1等级') mgradeFROM emp eLEFT OUTER JOIN dept d ON(e.deptno=d.deptno)LEFT OUTER JOIN salgrade s ON(e.sal BETWEEN s.losal AND s.hisal)LEFT OUTER JOIN emp m ON (e.mgr=m.empno)LEFT OUTER JOIN salgrade ms ON(m.sal BETWEEN ms.losal AND ms.hisal)6、查询所有员工的最低工资SELECT MIN(sal) FROM emp7、查询所有员工的最高工资SELECT MAX(sal) FROM emp8、查询所有员工的平均工资SELECT AVG(sal) FROM emp9、查询部门20的总工资SELECT SUM(sal) FROM emp WHERE deptno=2010、查询每个部门的员工数量SELECT deptno,COUNT(ename) FROM emp e GROUP BY deptno11、求出每个部门的平均工资SELECT deptno,AVG(sal) FROM emp GROUP BY deptno12、查询部门名称及每个部门的员工数量SELECT d.dname,COUNT(ename) FROM emp e,dept dWHERE e.deptno=d.deptnoGROUP BY d.dname13、查询平均工资大于2000的部门编号及平均工资SELECT deptno,AVG(sal)FROM empGROUP BY deptnoHAVING AVG(sal) > 200014、查询非销售人员工作名称以及从事同一工作雇员的月工资的总和,并且满足从事同一工作的雇员的月工资合计大于5000,并按月工资的合计升序排列●显示全部的非销售人员:job<>’SALESMAN’SELECT * FROM emp WHERE job<>’SALESMAN’●按工作分组,求出工资的总和SELECT job,SUM(sal)FROM empWHERE job<>’SALESMAN’GROUP BY job●对分组的条件进行限制,工资总和大于5000SELECT job,SUM(sal)FROM empWHERE job<>’SALESMAN’GROUP BY jobHAVING SUM(job)>5000使用排序,按升序排序SELECT job,SUM(sal) su FROM empWHERE job<>’SALESMAN’GROUP BY jobHAVING SUM(sal)>5000 ORDER BY su。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Review Questions1. How will the results of the following two statements differ? Statement 1:SELECT MAX(longitude), MAX(latitude)FROM zip_state_city;Statement 2:SELECT MAX(longitude), MAX(latitude)FROM zip_state_cityGROUP BY state;A. Statement 1 will fail because it is missing a GROUP BY clause.B. Statement 2 will return one row, and statement 1 may return more than one row.C. Statement 2 will fail because it does not have the columns used in the GROUP BY clause in the SELECT clause.D. Statement 1 will display two columns, and statement 2 will display two values for each state.2. Using the SALES table described here, you need to report the following:Gross, net, and earned revenue for the second a NN nd third quarters of 1999NN Gross, net, and earned revenue for sales in the states of Illinois, California, andTexas (codes IL, CA, and TX)Column Name state_code sales_date gross net earnedKey Type PK PKNulls/Unique NN NN NN NN NNFK TableDatatype VARCHAR2 DATE NUMBER NUMBER NUMBERLength 2 11,2 11,2 11,2Will all the requirements be met with the following SQL statement? SELECT state_code, SUM(ALL gross), SUM(net), SUM(earned) FROM sales_detailWHERE TRUNC(sales_date,’Q’) BETWEENTO_DATE(’01-Apr-1999’,’DD-Mon-YYYY’)AND TO_DATE(’01-Sep-1999’,’DD-Mon-YYYY’)AND state_cd IN (’IL’,’CA’,’TX’)GROUP BY state_code;A. The statement meets all three requirements.B. The statement meets two of the three requirements.C. The statement meets one of the three requirements.D. The statement meets none of the three requirements.E. The statement will raise an exception.3. Which line in the following SQL has an error?1 SELECT department_id, SUM(salary)2 FROM employees3 WHERE department_id <> 404 ORDER BY department_id;A. 1B. 3C. 4D. No errors in SQL4. John is trying to find out the average salary of employees in each department. He noticedthat the SALARY column can have NULL values, and he does not want the NULLs includedwhen calculating the average. Identify the correct SQL that will produce the desired results.A. SELECT department_id, AVG(salary)FROM employeesGROUP BY department_id;B. SELECT department_id, AVG(NVL(salary,0))FROM employeesGROUP BY department_id;C. SELECT department_id, NVL(AVG(salary), 0)FROM employeesGROUP BY department_id;D. SELECT department_id, AVG(salary)FROM employeesGROUP BY department_idHAVING salary IS NOT NULL;5. Review the following two SQL statements, and choose the appropriate option.1. SELECT department_id, COUNT(*)FROM employeesHAVING COUNT(*) > 10GROUP BY department_id;2. SELECT department_id, COUNT(*)FROM employeesWHERE COUNT(*) > 10GROUP BY department_id;A. Statement 1 and statement 2 will produce the same results.B. Statement 1 will succeed, and statement 2 will fail.C. Statement 2 will succeed, and statement 1 will fail.D. Both statements fail.6. Read the following SQL carefully, and choose the appropriate option. The JOB_ID columnshows the various jobs.SELECT MAX(COUNT(*))FROM employeesGROUP BY job_id, department_id;A. Aggregate functions cannot be nested.B. The columns in the GROUP BY clause must appear in the SELECT clause for the queryto work.C. The GROUP BY clause is not required in this query.D. The SQL will produce the highest number of jobs within a department.7. Identify the SQL that produces the correct result.A. SELECT department_id, SUM(salary)FROM employeesWHERE department_id <> 50GROUP BY department_idHAVING COUNT(*) > 30;B. SELECT department_id, SUM(salary) sum_salFROM employeesWHERE department_id <> 50GROUP BY department_idHAVING sum_sal > 3000;C. SELECT department_id, SUM(salary) sum_salFROM employeesWHERE department_id <> 50AND sum_sal > 3000GROUP BY department_id;D. SELECT department_id, SUM(salary)FROM employeesWHERE department_id <> 50AND SUM(salary) > 3000GROUP BY department_id;8. Consider the following SQL, and choose the most appropriate option.SELECT COUNT(DISTINCT SUBSTR(first_name, 1,1))FROM employees;A. A single-row function nested inside a group function is not allowed.B. The GROUP BY clause is required to successfully run this query.C. Removing the DISTINCT qualifier will fix the error in the query.D. The query will execute successfully without any modification.9. The sales order number (ORDER_NO) is the primary key in the table SALES_ORDERS. Whichquery will return the total number of orders in the SALES_ORDERS table?A. SELECT COUNT(ALL order_no) FROM sales_orders;B. SELECT COUNT(DISTINCT order_no) FROM sales_orders;C. SELECT COUNT(order_no) FROM sales_orders;D. SELECT COUNT(NVL(order_no,0) FROM sales_orders;E. All of the aboveF. A and C10. Sheila wants to find the highest salary within each department of the EMPLOYEES table.Which query will help her get what she wants?A. SELECT MAX(salary) FROM employees;B. SELECT MAX(salary BY department_id) FROM employees;C. SELECT department_id, MAX(salary) max_sal FROM employees;D. SELECT department_id, MAX(salary) FROM employees GROUP BY department_id;E. SELECT department_id, MAX(salary) FROM employees USING department_id;11. Which assertion about the following queries is true?SELECT COUNT(DISTINCT mgr), MAX(DISTINCT salary)FROM emp;SELECT COUNT(ALL mgr), MAX(ALL salary)FROM emp;A. They will always return the same numbers in columns 1 and 2.B. They may return different numbers in column 1 but will always return the same numberin column 2.C. They may return different numbers in both columns 1 and 2.D. They will always return the same number in column 1 but may return different numbersin column 2.12. Which clauses in the SELECT statement can use single-row functions nested in aggregatefunctions? (Choose all that apply.)A. SELECTB. ORDER BYC. WHERED. GROUP BY13. Consider the following two SQL statements. Choose the most appropriate option.1. select substr(first_name, 1,1) fn, SUM(salary) FROM employees GROUP BYfirst_name;2. select substr(first_name, 1,1) fn, SUM(salary) FROM employees GROUP BYsubstr(first_name, 1,1);A. Statement 1 and 2 will produce the same result.B. Statement 1 and 2 will produce different results.C. Statement 1 will fail.D. Statement 2 will fail, but statement 1 will succeed.14. How will the results of the following two SQL statements differ? Statement 1:SELECT COUNT(*), SUM(salary)FROM hr.employees;Statement 2:SELECT COUNT(salary), SUM(salary)FROM hr.employees;A. Statement 1 will return one row, and statement 2 may return more than one row.B. Both statements will fail because they are missing a GROUP BY clause.C. Both statements will return the same results.D. Statement 2 may return a smaller COUNT value than statement 1.15. Why does the following SELECT statement fail?SELECT colorname Colour, MAX(cost)FROM itemdetailWHERE UPPER(colorname) LIKE ‘%WHITE%’GROUP BY colourHAVING COUNT(*) > 20;A. A GROUP BY clause cannot contain a column alias.B. The condition COUNT(*) > 20 should be in the WHERE clause.C. The GROUP BY clause must contain the group functions used in the SELECT list.D. The HAVING clause can contain only the group functions used in the SELECT list.16. What will the following SQL statement return?select max(prod_pack_size)from sh.productswhere min(prod_weight_class) = 5;A. An exception will be raised.B. The largest PROD_PACK_SIZE for rows containingPROD_WEIGHT_CLASS of 5 or higherC. The largest PROD_PACK_SIZE for rows containingPROD_WEIGHT_CLASS of 5D. The largest PROD_PACK_SIZE in the SH.PRODUCTS table17. Why will the following query raise an exception?select dept_no, avg(distinct salary),count(job) job_countfrom empwhere mgr like ‘J%’or abs(salary) > 10having count(job) > 5order by 2 desc;A. The HAVING clause cannot contain a group function.B. The GROUP BY clause is missing.C. ABS() is not an Oracle function.D. The query will not raise an exception.18. Which clause will generate an error when the following query is executed?SELECT department_id, AVG(salary) avg_salFROM employeesGROUP BY department_idHAVING TRUNC(department_id) > 50;A. The GROUP BY clause, because it is missing the group function.B. The HAVING clause, because single-row functions cannot be used.C. The HAVING clause, because the AVG function used in the SELECT clause is not used inthe HAVING clause.D. None of the above. The SQL statement will not return an error.19. Which statements are true? (Choose all that apply.)A. A group function can be used only if the GROUP BY clause is present.B. Group functions along with nonaggregated columns can appear in the SELECT clauseas long as a GROUP BY clause and a HAVING clause are present.C. The HAVING clause is optional when the GROUP BY clause is used.D. The HAVING clause and the GROUP BY clause are mutually exclusive; you can use onlyone clause in a SELECT statement.20. Read the following two statements, and choose the best option.1. HAVING clause should always appear after the GROUP BY clause.2. GROUP BY clause should always appear after the WHERE clause.A. Statement 1 and 2 are false.B. Statement 1 is true, and statement 2 is false.C. Statement 1 is false, and statement 2 is true.D. Statements 1 and 2 are true.。