高级查询,分组查询

分组查询
定义:利用内置的分组函数来查询

所谓分组,就是看待数据的“角度”不同。
  也就是把某类值相同的看做一组。

语法:
select 列名,组函数(列名)...from 表名
where 条件
group by 列
having 字句
order by 列

分组函数:
SUM([distinct] 列|表达式|值)   求和
AVG([distinct] 列|表达式|值)   求平均值
MAX(列|表达式|值)   求最大值
MIN(列|表达式|值)    求最小值
COUNT([distinct] 列|*)  求个数(包含null)

如:

-- 找出员工的最高、最低、平均、以及工资总和
select max(salary),min(salary),avg(salary),sum(salary) from s_emp;

-- 找出各部门员工的最高、最低、平均、以及工资总和
select dept_id, max(salary),min(salary),avg(salary),sum(salary) from s_emp
group by dept_id
order by dept_id
;

-- 找出41,42,50部门员工的最高、最低、平均、以及工资总

select dept_id, max(salary),min(salary),avg(salary),sum(salary) from s_emp
group by dept_id
having dept_id in(41,42,50)
order by dept_id
;

select dept_id, max(salary),min(salary),avg(salary),sum(salary) from s_emp
where dept_id in(41,42,50)
group by dept_id
order by dept_id
;

注意1:只有出现在group by 后面的列[用来做为分组条件的列],才有资格
写在SELECT的后面,除非使用组函数进行修饰。

注意2:having 和where 都是条件
区别:
WHERE 子句中是不能使用 组函数的,因为它在GROUP BY 之前。
但是,HAVING 子句中可以使用组函数,因为它在GROUP BY 之后。

-- 统计各个职称中工资高于1100的各有多少人。
select count(*),title
from s_emp
where salary >1100
group by title;
-- 找出订单数量超过>=2个的客户
select c.name
from s_customer c join s_ord o on o.customer_id = c.id
group by c.id,c.name
having count(o.id)>=2;

-- 统计共计多少个员工
select count(e.id) from s_emp e;

-- 统计共计多少个职称[不能重复]
select count(distinct title) from s_emp;

练习:
--1.找出超过(含)4个员工的部门id及部门名称
select d.id,d.name,count(*)  from s_emp e
left join s_dept d on e.dept_id = d.id
group by d.id,d.name
having count(*)>=4;

--2.找出订单总费用超过10000元的客户
select c.name,c.id from s_customer c
left join s_ord o on c.id = o.customer_id
where o.total>=10000
group by c.name,c.id;

--3.统计各区域的客户数量,按它的降序排序
select r.id,r.name,count(*) from s_region r
join s_customer c on c.region_id = r.id
group by r.id ,r.name
order by count(*)desc;

--4.统计各经理的所管理的员工数
select e.manager_id ,count(e.id) from s_emp e
left join s_emp m on e.manager_id = m.id
group by e.manager_id;
--5.统计订单中各种支付的费用
select sum(o.total) 费用,o.payment_type 支付方式 from s_ord o group by o.payment_type;

时间: 2024-10-02 21:39:46

高级查询,分组查询的相关文章

Oracle 高级查询1 关联查询 分组查询

高级查询 1.关联查询作用:可以跨越多表查询 --查询出员工的名字和他所在部门的的名字 语法:select 列,列,列 from 表1 join 表2on 表1外键=表2主键 2.外联接 左外联[left outer join] 以关联的左边为准,即使右边没有与之匹配的记录,则左边的记录也要 出现在结果集中,右边全部以NULL值显示. 右外联[right outer join] 以关联的右边为准,即使左边没有与之匹配的记录,则右边的记录也要 出现在结果集中,左边全部以NULL值显示. 3分组查询

2016/3/13 七种查询 (普通查询 条件查询 排序查询 模糊查询 统计查询 分组查询 分页查询 )

一句话概括的话,SQL作为结构化查询语言,是标准的关系型数据库通用的标准语言: T-SQL 是在SQL基础上扩展的SQL Server中使用的语言 1,普通查询 #查询Info表中的所有列 select * from Info #查询Info表中的Name和Code列 select Name,Code from Info 2,条件查询 关键字where #查询Info表的左右列 限定范围 列名为p001 select * from Info where 列名="p001" #查询条件之

Hibernate5-投影查询,分组查询,Query的List和Iterate

1.创建项目,项目名称hibernatedemo9,目录结构如图所示 2.在项目中创建lib目录存储jar文件,目录结构如图所示 3.在src目录中创建实体Bean Forum,包名(com.mycompany.demo.bean),如图所示 4.实体Bean Forum的内容如下 package com.mycompany.demo.bean; public class Forum { private int fid; private String name; private int issh

Oracle的查询-分组查询

--查询出每个部门的平均工资 select e.deptno,avg(e.sal) from emp e group by e.deptno; 分组查询中,出现在 group by 后面的原始列,才能出现在 select 后面 没有出现在 group by 后面的原始列 ,想在 select 后边出现必须加上聚合函数 --查询出平均工资高于2000的部门 select e.deptno,avg(e.sal) from emp e group by e.deptno having avg(e.sa

关系数据库SQL之基本数据查询:子查询、分组查询、模糊查询

http://www.jianshu.com/p/eeb6a898d4ec 前言 上一篇关系数据库常用SQL语句语法大全主要是关系型数据库大体结构,本文细说一下关系型数据库查询的SQL语法. SQL数据查询 语法回顾 SELECT [ALL|DISTINCT] <目标列表达式>[,<目标列表达式>]- FROM <表名或视图名>[,<表名或视图名>]- [WHERE <条件表达式>] [GROUP BY <列名> [HAVING &l

Oracle基本语法&amp;&amp;函数&amp;&amp;子查询&amp;&amp;分页查询&amp;&amp;排序&amp;&amp;集合操作&amp;&amp;高级分组函数

一.  数据库 手工---文件管理---数据库 DB:Database 数据库. DBMS:管理数据库的软件.(oracle) 主流关系数据库: 1.      Oracle 2.      DB2 3.      SQL Server 基本没人使 4.      MySQL  基本没人用,免费 Linux 开源,可以发现漏洞补上 Windows服务器会有补丁,数据易泄漏 eclipse 日食 数据表(Table): 表的行(Row):记录 表的列(Column):字段 二.  关系型数据库 一

数据库9:联结表 高级联结 组合查询 全文本搜索

第十五章联结表 Sql最强大的功能之一就是能在数据检索查询的执行中联结(join)表.联结是利用sql的select能执行的最重要的操作,能很好的理解联结及其语法是学习sql的一个极为重要的组成部分.   外键:外键为某个表中的一列,它包含另一个表的主键值,定义了两个表之间的关系. 好处:供应商信息不重复,不浪费空间和时间,方便日后修改,一个表信息改动不影响另一个表的信息 联结是一种机制,使用特殊的语法,可以联结多个表返回一组输出,联结在运行时关联表中正确的行.   创建联结          

oracle中关联查询、分组查询

高级查询 1.关联查询作用:可以跨越多表查询 --查询出员工的名字和他所在部门的的名字//古老的写法select first_name,name from s_emp,s_dept where s_emp.dept_id = s_dept.id;//现在的写法select e.first_name,s.name from s_emp e join s_dept s on e.dept_id = s.id;语法:select 列,列,列 from 表1 join 表2on 表1外键=表2主键 案例

SQL group 分组查询

1.使用group by进行分组查询  在使用group by关键字时,在select列表中可以指定的项目是有限制的,select语句中仅许以下几项:  被分组的列 为每个分组返回一个值得表达式,例如用一个列名作为参数的聚合函数group by的使用在这只写几个例子吧:例: select courseID,avg(score) as 课程平均成绩 from score group by courseID 例: select studentID as 学员编号,courseID as 内部测试,a