php having,having方法

having方法

1、对分组统计的结果,进行筛选如果将分分组查询的结果看成一张表的话,having方法类似where语句的功能

2、源码:/thinkphp/library/think/db/Query.php/**

* 指定having查询

* @access public

* @param string $having having

* @return $this

*/

public function having($having)

{

$this->options['having'] = $having;

return $this;

}源码非常简单,就是给Query类的查询选项属性options[ 'having' ] 赋值

3、参数与返回值参数如果把分组查询结果看作一张新数据表的话,having就相当于该表的where操作。同理,这个“新表”中应该只有分组字段和统计字段(由聚合函数计算得到的值组成的字段)。我们having方法,就是在统计字段中,找出符合条件的记录:如平均值大于500之类的条件。序号参数说明1聚合函数组成的运算表达式从统计查询结果是,筛选出符合条件的记录having方法与where方法都可以设置查询条件,但二者使用是有区别的:

(1) where方法中的字段,必须是表中实际真实存在的字段

(2) having方法中的定段,不一定是表中实际字段,只要是select语句可以查询或计算出来的表达式都可以,例如拼接字段名、数值型字段的算术运算、统计类聚合函数等;换句话说,having 中的字段,必须在select后面的字段列表中出现。返回值:与其它方法一样,返回查询对象本身,便于后面访问调用

4、实例演示

任务1:查询tp5_staff表中,各部门的平均工资大于6400元的员工信息

该实例是前面group方法的加强版,加了一个限定条件而已,请对照着看

Index.php 控制器中代码如下:

namespace app\index\controller;

//导入数据库类

use think\Db;

class Index {

public function index(){

//查询部门的平均工资,小数保留2位

$result = Db::table('tp5_staff')

//字段名称中,可以使用聚合统计函数

-> field(['dept'=>'部门','ROUND(AVG(salary),2)'=>'平均工资'])

-> group('dept')

-> having('avg(salary) > 6400')

-> select();

//查看结果

dump($result);

}查询结果如下:array(2) {

[0] => array(2) {

["部门"] => string(9) "市场部"

["平均工资"] => float(9431.33)

}

[1] => array(2) {

["部门"] => string(9) "开发部"

["平均工资"] => float(6456.43)

}

}可以看到,原来的市场部平均工资数据消失了,因为他的平均工资不到6400生成的SQL语句如下:SELECT `dept` AS `部门`,ROUND(AVG(salary),2) AS `平均工资` FROM `tp5_staff` GROUP BY dept HAVING avg(salary) > 6400表中数据如下:

c4a46731f3a45eea95855b1749c9ffca.png

总结:having条件与where条件非常相似,但又有本质不同。where是根据某列特征进行查询,而having是在查询已经产生的结果集中进行筛选。这二个方法执行的对象和时机是不同的,请注意区别。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/380612.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux:jumpserver介绍(1)

官方网站 JumpServer - 开源堡垒机 - 官网https://www.jumpserver.org/ JumpServer 是广受欢迎的开源堡垒机,是符合 4A 规范的专业运维安全审计系统。JumpServer 帮助企业以更安全的方式管控和登录所有类型的资产,实现事前授权、事中监察、事后审计&…

对一个简单汇编程序分析

程序: assume cs:codesgcodesg segmentmov ax,0123Hmov bx,0456Hadd ax,bxadd ax,axmov ax,4c00Hint 21Hcodesg endsend伪指令: 伪指令是写给编译器看的,CPU不会执行,在源程序中,包括两种指令,一个是…

劈尖等厚干涉条纹matlab,劈尖等厚干涉实验中,k=0级的干涉条纹是条纹,与k级暗条纹对应的空气薄膜的厚度为...

劈尖等厚干涉实验中,k0级的干涉条纹是条纹,与k级暗条纹对应的空气薄膜的厚度为答:暗,kλ/2spampython 编程\nprint(spam[-6:-4])是否报错?(是:则填写报错原因,否:则填写输出结果)答&…

使用OpenCV python模块读取图像并将其另存为灰度系统

In Python, we can use an OpenCV library named cv2. Python does not come with cv2, so we need to install it separately. 在Python中,我们可以使用名为cv2的OpenCV库 。 Python没有随附cv2 ,因此我们需要单独安装它。 For Windows: 对于Windows&a…

A4Desk 网站破解

A4Desk是一个不错的Flash站点建站工具,不过生成的swf文件很不爽,主要是1、单击3次就会显示注册对话框;2、会在网站上显示Demo 字样。 如果希望去掉这些信息,按如下步骤操作即可: 一、用A4Desk建立站点并导出。 二、用S…

and和or指令

and指令:逻辑与指令,按位进行与运算 mov al,01100011B and al,00111011B执行后al00100011B,两个为1才为1,所以通过该指令可将操作数对象的相应位设为0,其他位不变 or指令:逻辑或指令,按位进行…

php 上传多个txt文件上传,一个多文件上传的例子(原创)

一个多文件上传的例子(原创)更新时间&#xff1a;2006年10月09日 00:00:00 作者&#xff1a;//filename:multi_upload.phpif($ifupload){$pathAddSlashes(dirname($PATH_TRANSLATED))."\\upload\\";for($i1;$i<8;$i){$files"afile".$i;if(${$files}!&…

DI和SI

si和di是8086CPU中和bx功能相近的寄存器&#xff0c;di和si不能分成两个8位寄存器来使用。下面的3组指令实现了相同的功能&#xff1a; mov bx,0 mov ax,[bx]mov si,0 mov ax,[si]mov di,0 mov ax,[di]我们遇到si和di时&#xff0c;就往bx上靠&#xff0c;基本上bx什么功能di和…

无线智能路由器家长控制宽带

家长对控制孩子的上网问题颇为头痛&#xff0c;其实只要方法用对&#xff0c;控制孩子上网是完全没有问题的。我总结了三条供家长们分享。 6-16岁的孩子正是学习知识&#xff0c;塑造性格最佳时期&#xff0c;辨别事物也最为薄弱。要想控制孩子上网&#xff0c;首先要在思想上引…

求职新玩法:如今用MSN也可以求职

今天在Donews上看到一篇文章说到利用MSN求职&#xff0c;在你的MSN中添加联系人job01hr.com&#xff0c;然后向该联系人发送消息&#xff0c;比如输入&#xff1a;北京 .NET&#xff0c;对方会提示给你搜索到多少项符合的记录&#xff0c;同时还提供命令行帮助你&#xff1a;/h…

BX、DI、SI、BP总结

在8086CPU中&#xff0c;只有这四个寄存器可以放在[…]内来进行内存单元的寻址 下面的指令是错误的 mov ax ,[cx] mov ax,[ax] mov ax,[dx]在[…]中&#xff0c;bx和bp不能同时出现&#xff0c;si和di不能同时出现 比如下面的指令是错误的 mov ax,[bxbp] mov ax,[sidi]在[…]…

缓存应用--Memcached分布式缓存简介(二)

1 命令行查看状态 很多时候我们需要去查看Memcached 的使用状态&#xff0c;比如Memcached 的运行时间&#xff0c;使用状态等等。在Windows系统中我们可以使用telnet 命令来查看Memcached 的相关运行情况。 开始—>运行cmd 运行得到如下&#xff1a; 输入telnet命令&#x…

Android模拟器无法上网问题

方法一 首先&#xff0c;Windows下&#xff0c;配置Adroid环境变量&#xff08;Win7为例&#xff09; 1、桌面右键——》我的电脑——》高级系统设置 2、高级——》环境变量——》系统变量——》Path 3、添加android sdk目录到系统变量Path中&#xff0c;如下图&#xff1a; 注…

2011年:签到已死?

导读&#xff1a;作为移动互联网最受关注的热点之一&#xff0c;各式LBS应用一度大量涌现&#xff0c;但其发展局限也越来越被更多的业界同行清楚认知&#xff0c;LBS只是一个功能特性还是可以支撑起一个产品&#xff1f;签到如何添加黏性和用户核心需求结合&#xff1f;LBS厂商…

Pip:基本命令和使用的指南,实现有效的包管理

目录 学习目标&#xff1a; 学习内容&#xff1a; 学习时间&#xff1a; 学习产出&#xff1a; 介绍 Pip 工具&#xff1a;Pip 是 Python 包管理工具&#xff0c;可以帮助用户方便地安装、管理和升级 Python 包&#xff1a; 安装 Pip 工具&#xff1a;学习如何在不同操作系统上…

oracle dg 搭建方式,Linux平台 Oracle 11g DG测试环境快速搭建参考

环境现状&#xff1a;两台虚拟主机A和B&#xff1a;1. A机器已安装ASM存储的Oracle 11g 实例2. B机器已安装系统&#xff0c;配置以及目录结构均和A机器保持一致/u01 3块ASM盘DG部署规划&#xff1a;primarystandby主机JY-DBJY-DBSdb_namejyzhaojyzhaodb_unique_namejyzhaojyz…

細微之處看看mysql與sql server的一些差別

以前不怎麼使用mysql&#xff0c;最近有些事情&#xff0c;需要用到php和mysql。目前使用的版本是5.5.1 發現mysql與sql server有很多不同。可能逐漸地會整理一些文檔出來給大家參考。 今天第一篇說說&#xff0c;update操作的差異。在mysql中&#xff0c;如果update語句要設置…

引用参数

• 默认情况下CLR规定所有方法的参数都按值传递的 • 参数类型分为:值类型参数和引用类型参数 • 参数传递方式:传值方式和传址方式 • Ref和Out的共同:传址传递 • Ref和Out的异同:ref修饰的参数必须在传递前对参数进行初始化;out反之,且必须在参数返回前进行初始化赋值 •在值…

jmp指令

功能&#xff1a; 无条件转移指令 jmp指令要给出两种信息&#xff1a; 转移的目标地址转移的距离&#xff08;段间转移、段内短转移、段内近转移&#xff09; 段内短转移&#xff1a; jmp short 标号&#xff09; assume cs:code code segmentstart:mov ax,0jmp short sad…

aspnet_Membership_GetUserByEmail////aspnet_Membership_GetUserByName

ALTERPROCEDUREdbo.aspnet_Membership_GetUserByEmail --通过邮箱获取用户名ApplicationNameNVARCHAR(256), EmailNVARCHAR(256)ASBEGINIF( EmailISNULL) SELECTu.UserName FROMdbo.aspnet_Applications a, dbo.aspnet_Users u, dbo.aspnet_Membership m …