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,一经查实,立即删除!

相关文章

合并排序算法排序过程_合并排序| 用于大型输入的最佳排序算法之一

合并排序算法排序过程What is sorting? 什么是分类? Sorting allows us to process our data in a more organized and efficient way. It makes searching easy as it will now take less time to search for a specific value in a given sorted sequence with …

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不会执行,在源程序中,包括两种指令,一个是…

datagrid 页眉合并

http://www.codeproject.com/aspnet/MergeDatagridHeader.asp private void DataGrid1_ItemDataBound(object sender, DataGridItemEventArgs e){//产生序号,合并单元格if(e.Item.ItemIndex!-1){e.Item.Cells[1].TextConvert.ToString(e.Item.ItemIndex1);//}else{e…

劈尖等厚干涉条纹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…

loop指令

功能:循环 格式:loop 标号 执行过程: cxcx-1判断cx的值,不为0则转至标号处执行程序,如果为0则向下执行 从上面的执行过程可以看出,cx存放的是循环次数 举个例子:实现2的12次方 assume cs:co…

不知不觉中学会做一个有主见的人

今天还是经历了不少事情,首先中午定好了聚会吃饭的地方,通知了以前班里的同学。事情解决了觉得心里很开心。中午不睡觉去人文馆准备听微软的宣讲会。等到三点多稀稀疏疏的几个人在那里,一个保安跑进来说取消了。埃,居然不通知。虽…

C# datetime 操作

C# datetime 操作 //C#里内置的DateTime基本上都可以实现这些功能,巧用DateTime会使你处理这些事来变轻松多了 //今天 DateTime.Now.Date.ToShortDateString(); //昨天,就是今天的日期减一…

php 子网掩码正则,验证子网掩码正则表达式代码范例

验证子网掩码正则表达式代码实例:在实际应用中可能验证子网掩码合法性的需求并不多,但并不能够保证绝对没有,下面就分享一段能够实现此功能的代码实例,希望能够给需要的朋友带来一定的帮助,代码如下:function checkMask(mask){var…

c# 可变二维数组_C#| 具有固定行大小和可变列大小的二维数组

c# 可变二维数组Here, the task is to declare a two dimensional array – where number rows are given and columns are variable length: 在这里,任务是声明一个二维数组-其中给出了行数,列数是可变长度 : To declare such array, we us…

loop和[bx]的联合应用

计算ffff:0-ffff:b单元中的数据的和,结果存储在dx中(8086) assume cs:codecode segmentmov ax,0ffffhmov ds,axmov bx,0mov dx,0mov cx,12s: mov al,[bx]mov ah,0add dx,axinc bxloop smov ax,4c00hint 21hcode ends endloop相当于for循环&a…

javascript实现网页对联广告

1、将下面代码放到<head></head>之间<SCRIPT languageJavaScript src"tan.js"></SCRIPT> 2、tan.js文件下载地址/Files/MaxIE/2005618154128678.rar转载于:https://www.cnblogs.com/MaxIE/archive/2005/12/22/302475.html

c语言打印数组元素_C程序打印元素差为0或1的子集数

c语言打印数组元素Given an array of integers, find and print the maximum number of integers you can select from the array such that the absolute difference between any two of the chosen integers is less than or equal to 1. 给定一个整数数组&#xff0c;查找并…

将数据、代码、栈放入不同的栈(8086)

先上程序&#xff1a; assume cs:code,ds:data,ss:stackdata segmentdw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h data endsstack segmentdw 0,0,0,0,0,0,0,0,0,0 stack endscode segmentstart: mov ax,stackmov ss,axmov sp,20hmov ax,datamov ds,axmov bx,0mov cx,…

ftp put 550 Access is denied

ii6 要想让用户上传文件&#xff0c;必须给整个ftp站点赋予写入权限转载于:https://www.cnblogs.com/dataflowjia/archive/2011/04/06/2007173.html

从MapX到MapXtreme2004[2]-图层操作

Mapx中基本的图层操作还是比较简单的&#xff0c;集中在对Layers和Layer的处理上&#xff0c;对别的没有太多要求。在MapXtreme中&#xff0c;要完成类似功能&#xff0c;发生了一点变化&#xff0c;如下&#xff1a;1、图层的显示在MapXtreme中&#xff0c;图层的显示控制发生…

nextcloud+nginx+mysql,Ubuntu搭建Nginx-Nextcloud环境

环境部署与安装安装mysql-server“$ sudo apt-get install mysql-server“安装的过程中会设置密码进入mysql“$ mysql -u root -p“创建数据库名“$ reate database nextcloud“查看数据名称“$ show databases“安装PHP7.0“$ sudo apt-get install php7.0-*“关于PHP7.0相关模…

抛硬币正面期望_如果抛硬币,正面的数量多于反面的可能性

抛硬币正面期望Problem statement: 问题陈述&#xff1a; Let N be a positive odd number. There are N coins, numbered 1, 2 , ... , N. For each i (1≤i≤N), when Coin i is tossed, it comes up heads with probability pi and tails with probability 1-pi. 令N为正奇…

委托用法

一、委托callback 回调函数声明委托&#xff1a;&#xff08;与声明类相似&#xff09;public delegate string MyDelegate(string sInput);使用委托&#xff1a;1. MyDelegate myDelegateCase new MyDelegate(InvokeMethod);private string InvokeMethod(string sInput){retu…