当前位置:  数据库>sqlserver

SQL分组查询group by语句实例

    来源: 互联网  发布时间:2014-08-29

    本文导语:  注意:select 后的字段,必须要么包含在group by中,要么包含在having 后的聚合函数中。 1,GROUP BY 是分组查询, 一般 GROUP BY 是和聚合函数配合使用 group by 有一个原则,就是 select 后面的所有列中,没有使用聚合函数的列,必须出现在 ...

注意:select 后的字段,必须要么包含在group by中,要么包含在having 后的聚合函数中。

1,GROUP BY 是分组查询, 一般 GROUP BY 是和聚合函数配合使用
group by 有一个原则,就是 select 后面的所有列中,没有使用聚合函数的列,必须出现在 group by 后面(重要)
例如,有如下数据库表:
A    B
1    abc
1    bcd
1    asdfg
如果有如下查询语句(该语句是错误的,原因见前面的原则)
 

代码示例:
select A,B from table group by A 

该查询语句的意图是想得到如下结果(当然只是一相情愿)
A     B
       abc
1     bcd
       asdfg
右边3条如何变成一条,所以需要用到聚合函数,如下(下面是正确的写法):
 

代码示例:
select A,count(B) as 数量 from table group by A

这样的结果就是
A    数量
1    3 
 
2,Having子句
where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。
having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件显示特定的组,也可以使用多个分组标准进行分组。
having 子句被限制子已经在SELECT语句中定义的列和聚合表达式上。通常,你需要通过在HAVING子句中重复聚合函数表达式来引用聚合值,就如你在SELECT语句中做的那样。例如:
 

代码示例:
SELECT A COUNT(B) FROM TABLE GROUP BY A HAVING COUNT(B)>2

3,使用compute和compute by
使用compute子句允许同时观察查询所得到各列的数据的细节以及统计各列数据所产生的汇总列
 

代码示例:
select * from work [查询所得到的各列的数据的细节]
compute max(基本工资),min(基本工资) [统计之后的结果]

这个例子中没有使用by关键字,返回的结果是最后添加了一行基本工资的最大值和最小值,也可增加by关键字.
例:

代码示例:
select * from work order by 学历
compute max(基本工资),min(基本工资) by 学历
比较:select 学历,max(基本工资),min(基本工资) from work group by 学历

说明:
1:compute子句必须与order by子句用在一起
2:compute子句可以返回多种结果集.一种是体现数据细节的数据集,可以按分类要求进行正确的分类;另一种在分类的基础上进行汇总产生结果.
3:而group by子句对每一类数据分类之后只能产生一个结果,不能知道细节
 
示例学习Northwind数据库:
非相关查询:
1:返回每个美国员工都为其处理过订单的所有客户
 

代码示例:
--思路:1:Employees表中获取美国员工总数2:Orders表中查询美国员工处理的Order,对CustomerID分组后,统计其不同的EmployeeID正好等于美国员工总数
Select CustomerID From Orders Where EmployeeID In         --得到美国员工服务 的客户
(Select EmployeeID From Employees Where Country=N'USA') -- 得到全部美国员工id
group by CustomerID                                         --按客户分组
Having Count(Distinct EmployeeID)=                    --为其处理订单的distinct 员工数等于美国总员工数
(Select Count(*) From Employees Where Country=N'USA')--美国员工总数

2:
返回在每月最后实际订单日期发生的订单(每月最后订单日期可能不是每月最后一天)
 

代码示例:
--思路:子查询按月分组得到每月最近订单日期
Select OrderID,CustomerID,EmployeeID,OrderDate
From Orders
Where OrderDate In
(Select Max(OrderDate) From Orders Group by Convert(char(6),OrderDate,112))--112表示YYYYMMDD char(6)提取YYYYMM
 

 3.
Select字句在逻辑上是SQL语句最后进行处理的最后一步,所以,以下查询会发生错误:
 

代码示例:
SELECT OrderYear, COUNT(DISTINCT CustomerID) AS NumCusts
FROM (SELECT YEAR(OrderDate) AS OrderYear, CustomerID
   FROM dbo.Orders) AS D
GROUP BY OrderYear

;因为group by是在Select之前进行的,那个时候orderYear这个列并没有形成。

如果要查询成功,可以像下面进行修改:
 

代码示例:
SELECT OrderYear, COUNT(DISTINCT CustomerID) AS NumCusts
FROM (SELECT YEAR(OrderDate) AS OrderYear, CustomerID
   FROM dbo.Orders) AS D
GROUP BY OrderYear;还有一种很特殊的写法:
SELECT OrderYear, COUNT(DISTINCT CustomerID) AS NumCusts
FROM (SELECT YEAR(OrderDate), CustomerID
   FROM dbo.Orders) AS D(OrderYear, CustomerID)
GROUP BY OrderYear;

在作者眼里,他是非常喜欢这种写法的,因为更清晰,更明确,更便于维护。

在查询中使用参数定向产生一批结果,这个技巧没有什么好说的。

嵌套查询,在处理逻辑上是从里向外进行执行的。

注意:group by 后面可以有多个分组的字段 细分组。

您可能感兴趣的文章:
  • SQL分组排序与分组查询统计
  • mysql分组查询示例代码
  • 一个sql server分组查询的例子
  • sql server分组查询与排序的例子
  • Sql Server多行合并及分组查询的例子
  • sql server数据分组查询脚本分析

    
 
 

您可能感兴趣的文章:

  • SQL分组排序去除重复实例
  • Sql Server多行合并一行 sql分组统计
  • sql分组查询(按组内个数排序)
  • SQL分组排序去重复的小实例
  • SQL分组统计简单例子
  • 显示同一分组中的其他元素的sql语句
  • sql中获取分组排序后数据方法实例
  • SQL语句分组获取记录的第一条数据的方法
  • SQL分组查询实例解析
  • sql语句获取分组排序后数据
  • sql server分组排序之row_number()over函数的使用
  • Sql Server 分组统计并合计总数(WITH ROLLUP用法)
  • sql分组排序与分组统计技巧
  • sql server 2000/2005/2008中一句话完成分组后加序号
  • sql获取分组排序后数据的脚本
  • sql server分组查询与排序的例子
  • sql server数据分组查询脚本分析
  • SQL分组排序与分组查询统计
  • Sql Server 分组统计并合计总数及WITH ROLLUP应用
  • 以数据库字段分组显示数据的sql语句(详细介绍)
  • mysql中查询当前正在运行的SQL语句并找出mysql中运行慢的sql语句
  • oracle导出sql语句的结果集和保存执行的sql语句(深入分析)
  • Mysql增加主键或者更改表的列为主键的sql语句
  • sql语句实例 取得日志条目的sql语句
  • Mysql下在某一列后即表的某一位置添加新列的sql语句
  • SQL Server统计SQL语句执行时间的脚本
  • sql语句实例 统计页面链接的sql语句
  • 如何实现连接一次数据库,提交多个sql语句。(sql的批处理)
  • 一条SQL语句搞定Sql2000 分页
  • C#中验证sql语句是否正确(不执行语句)
  • SQL Server数据库的修复SQL语句
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • php防止sql注入代码实例
  • T-SQL实例 函数结果设置为列别名
  • 怎样不执行SELECT SQL语句即可获得ResultSetMetaData实例????
  • sql语句实例 统计一个特定页面中的相关链接
  • 教你怎么使用sql游标实例分享
  • mysqli多条sql语句查询实例
  • MSSQL中递归SQL查询语句实例说明-
  • sql语句not and or执行顺序(实例解析)
  • Sql Server中存储过程中输入和输出参数(简单实例 一看就懂)
  • SQL语句练习实例之七 剔除不需要的记录行
  • SQL cursor用法实例
  • sql server 触发器实例(判断是插入、删除,还是修改)
  • sql条件查询语句的简单实例
  • sql server 触发器实例:特定字段更新时触发Update触发器
  • sql语句like多个条件的写法实例
  • SQL自连接(self join)实例学习
  • T-SQL常用游标函数实例学习
  • 使用SQL Server判断文件是否存在并删除的实例代码
  • sql server多行数据拼接的实例方法
  • sql Server使用ROW_NUMBER时不排序的实例代码
  • java命名空间java.sql接口statement的类成员方法: executeupdate定义及介绍
  • 请问,这是什么错误!java.sql.SQLException: [Microsoft][ODBC SQL Server Driver][Named Pipes]??????? SQL Server?虽然分少,但一定给,只要您是前5名回复者中最好的以为!
  • java命名空间java.sql接口connection的类成员方法: nativesql定义及介绍
  • SQL查询分析工具 SQL Workbench/J
  • java命名空间java.sql接口preparedstatement的类成员方法: executeupdate定义及介绍
  • SQL客户端软件 PKLite SQL Client
  • java命名空间java.sql接口rowid的类成员方法: getbytes定义及介绍
  • SQL语句实现SQL Server 2000及Sql Server 2005日志收缩(批量)
  • java命名空间java.sql接口ref的类成员方法: getbasetypename定义及介绍
  • SQL客户端管理工具 SQuirreL SQL Client
  • java命名空间java.sql接口databasemetadata的类成员方法: getsqlkeywords定义及介绍


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,