GROUP BY的用法

本文介绍了SQL语言中的GROUP BY和HAVING子句的应用。通过具体实例展示了如何使用GROUP BY对数据进行分组,并结合聚合函数如SUM和COUNT进行计算。同时解释了HAVING子句在分组后对结果进行进一步筛选的方法。

在介绍GROUP BY 和 HAVING 子句前,我们必需先讲讲sql语言中一种特殊的函数:聚合函数,例如SUM, COUNT, MAX, AVG等。这些函数和其它函数的根本区别就是它们一般作用在多条记录上。 

SELECT SUM(population) FROM bbc

  这里的SUM作用在所有返回记录的population字段上,结果就是该查询只返回一个结果,即所有国家的总人口数。

  通过使用GROUP BY 子句,可以让SUM 和 COUNT 这些函数对属于一组的数据起作用。当你指定 GROUP BY region 时, 属于同一个region(地区)的一组数据将只能返回一行值,也就是说,表中所有除region(地区)外的字段,只能通过 SUM, COUNT等聚合函数运算后返回一个值。

  HAVING子句可以让我们筛选成组后的各组数据,WHERE子句在聚合前先筛选记录.也就是说作用在GROUP BY 子句和HAVING子句前.
而 HAVING子句在聚合后对组记录进行筛选。

  让我们还是通过具体的实例来理解GROUP BY 和 HAVING 子句,还采用第三节介绍的bbc表。

  SQL实例:

  一、显示每个地区的总人口数和总面积:

SELECT region, SUM(population), SUM(area)
FROM bbc
GROUP BY region

  先以region把返回记录分成多个组,这就是GROUP BY的字面含义。分完组后,然后用聚合函数对每组中的不同字段(一或多条记录)作运算。

  二、 显示每个地区的总人口数和总面积.仅显示那些面积超过1000000的地区。

SELECT region, SUM(population), SUM(area)
FROM bbc
GROUP BY region
HAVING SUM(area)>1000000

  在这里,我们不能用where来筛选超过1000000的地区,因为表中不存在这样一条记录。

  相反,HAVING子句可以让我们筛选成组后的各组数据.

 

=================================================================================

GROUP BY 是分组查询, 一般 GROUP BY 是和 聚合函数配合使用,你可以想想 

你用了GROUP BY 按 ITEM.ITEMNUM 这个字段分组,那其他字段内容不同,变成一对多又改如何显示呢,比如下面所示 

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) 数量 from table group by A 
这样的结果就是 
A 数量 
1 3 

group by 有一个原则,就是 select 后面的所有列中,没有使用聚合函数的列,必须出现在 group by 后面 。

转自dev.yesky.com/230/2669730.shtml

public String showBzgg(){ put("bzgg",drugDao1.queryWordbook("bzgg",copy)); return "showBzgg"; } public String showPz(){ put("pz",drugDao1.queryWordbook("pz",copy)); return "showPz"; } <body class="gray-bg"> <div class="wrapper wrapper-content animated fadeInRight"> <form method="post" action="gjdrugsample!showBzgg.do"> <div class="input-group" style="margin-top:5px;"> <input name="copy" type="text" class="form-control required" value="" id="copy"> <span class="input-group-btn"> <button type="button" class="btn btn-default" onclick="this.form.submit()"> 搜索 </button> </span> </div> </form> <ul style="list-style-type: none;" id="jxnr_list"> <c:forEach items="${map.bzgg}" var="row" varStatus="st"> <li style="float: left; width: 300px; border-bottom: solid 1px #e5e5e5; margin-left:-40px"><a class="lab" >${row.fremark}</a>       <a href="javascript:del('${row.fsid}')" style="color:#f40;"><i class="fa fa-remove"></i></a></li> </c:forEach> </ul> </div> </body> <script> $("#jxnr_list .lab").click(function(o){ parent.closeDlg('fbzgg',$(this).html()) }); function del(id){ if(confirm("确定删除该信息吗?")){ $.post("wordbookAdmin!delete.do?fsid="+id,{},function(json){ document.location.reload(); },"json"); } } </script> <body class="gray-bg"> <div class="wrapper wrapper-content animated fadeInRight"> <form method="post" action="gjdrugsample!showPz.do"> <div class="input-group" style="margin-top:5px;"> <input name="copy" type="text" class="form-control required" value="" id="copy"> <span class="input-group-btn"> <button type="button" class="btn btn-default" onclick="this.form.submit()"> 搜索 </button> </span> </div> </form> <ul style="list-style-type: none;" id="jxnr_list"> <c:forEach items="${map.pz}" var="row" varStatus="st"> <li style="float: left; width: 300px; border-bottom: solid 1px #e5e5e5; margin-left:-40px"><a class="lab" >${row.fremark}</a>       <a href="javascript:del('${row.fsid}')" style="color:#f40;"><i class="fa fa-remove"></i></a></li> </c:forEach> </ul> </div> </body> <script> $("#jxnr_list .lab").click(function(o){ parent.closeDlg('fjymlpzmc',$(this).html()) }); function del(id){ if(confirm("确定删除该信息吗?")){ $.post("wordbookAdmin!delete.do?fsid="+id,{},function(json){ document.location.reload(); },"json"); } } </script> public List queryWordbook(String type,String keyword){ return getHibernateTemplate().getSessionFactory().getCurrentSession().createQuery("select a from TSysWordbook a where ffield='"+type+"' "+(!Util.isEmpty(keyword)?(" and fremark like '%"+keyword+"%'"):"")+" order by fremark asc").list(); }同样的方法为什么showBzgg可以搜索而showPz搜索报错404
11-21
先看效果: https://renmaiwang.cn/s/jkhfz Hue系列产品将具备高度的个性化定制能力,并且借助内置红、蓝、绿三原色LED的灯泡,能够混合生成1600万种不同色彩的灯光。 整个操作流程完全由安装于iPhone上的应用程序进行管理。 这一创新举措为智能照明控制领域带来了新的启示,国内相关领域的从业者也积极投身于相关研究。 鉴于Hue产品采用WiFi无线连接方式,而国内WiFi网络尚未全面覆盖,本研究选择应用更为普及的蓝牙技术,通过手机蓝牙与单片机进行数据交互,进而产生可调节占空比的PWM信号,以此来控制LED驱动电路,实现LED的调光功能以及DIY调色方案。 本文重点阐述了一种基于手机蓝牙通信的LED灯设计方案,该方案受到飞利浦Hue智能灯泡的启发,但考虑到国内WiFi网络的覆盖限制,故而选用更为通用的蓝牙技术。 以下为相关技术细节的详尽介绍:1. **智能照明控制系统**:智能照明控制系统允许用户借助手机应用程序实现远程控制照明设备,提供个性化的调光及色彩调整功能。 飞利浦Hue作为行业领先者,通过红、蓝、绿三原色LED的混合,能够呈现1600万种颜色,实现了全面的定制化体验。 2. **蓝牙通信技术**:蓝牙技术是一种低成本、短距离的无线传输方案,工作于2.4GHz ISM频段,具备即插即用和强抗干扰能力。 蓝牙协议栈由硬件层和软件层构成,提供通用访问Profile、服务发现应用Profile以及串口Profiles等丰富功能,确保不同设备间的良好互操作性。 3. **脉冲宽度调制调光**:脉冲宽度调制(PWM)是一种高效能的调光方式,通过调节脉冲宽度来控制LED的亮度。 当PWM频率超过200Hz时,人眼无法察觉明显的闪烁现象。 占空比指的...
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值