有方法
最编程
2024-03-19 08:58:54
...
-
having方法
- 1、对分组统计的结果,进行筛选
- 2、源码:/thinkphp/library/think/db/Query.php
- 3、参数与返回值
- 4、实例演示
- 总结:
-
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 控制器中代码如下:
<?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
- 表中数据如下:
总结:
having条件与where条件非常相似,但又有本质不同。where是根据某列特征进行查询,而having是在查询已经产生的结果集中进行筛选。这二个方法执行的对象和时机是不同的,请注意区别。
上一篇: 文件下载实现
推荐阅读
-
修改 word 文档创建者的方法有哪些?如何修改文档的作者 这两种方法你必须知道 - 软件下载地址:https://www.huibang168.com/static/upload/2Lph6q3Q/file/81/HuibangMetadata_3.7.0.0.exe 除了在 Word 中修改作者信息外,您还可以通过修改文档的元数据来更改作者。元数据存储在文档内部,用于描述文档数据的属性。 具体步骤如下
-
如何将微信语音转发给他人_如何将收到的微信语音转发给他人?试试这2种方法,或许对你有帮助...
-
es6 地图对象有哪些遍历方法?
-
如何卸载 Macbook 上的软件,常用方法有哪些?
-
整数编程的求解方法有哪些
-
大数据分析的常用方法有哪些?
-
气泡排序(超级详细)--升序",从小到大;另一种是 "降序",从大到小。该主题可抽象为 "按升序对 n 个数字排序 "的一般形式。 排序是一种重要的基本算法。排序的方法有很多种,但在本题中我们将使用冒泡排序法。 冒泡法的基本思想 冒泡法的基本思想是,每次比较相邻的两个数字时,较小的那个会被移到前面。如果有 5 个数字9,8,5,2,0,第一次将前两个数字 8 和 9 互换。第二次将第二个和第三个数字(9 和 5)对调......这样一共对调 4 次,得到 8-5-2-0-9 的顺序,可以看到:最大的数字 9 一直在 "下沉",成为最下面的一个数字,而小的数字 "上升" 最小的数字 "上升"。最小的数字 0 已经向上 "浮 "了一个位置。经过第一次比较(共 4 次比较和交换),得到了最大的数字 9。 然后进行第二趟比较,对剩下的前 4 个数字(8、5、2、0)进行新一轮比较,这样第二个最大的数字就 "沉到了底部"。同样,按照上述方法进行第二轮比较。经过 3 次比较和交换,我们得到了第二大数 8。 按照这个规律,我们可以推断出,比较 5 个数字需要 4 次旅行,才能将 5 个数字从小到大排列起来。在第一次旅行中,两个数字之间进行了 4 次比较,在第二次旅行中,进行了 3 次比较......在第四次旅行中,只进行了一次比较。 思路总结 总结:如果有 n 个数字,那么要进行 n-1 次比较。在第一次行程中进行 n-1 次比较,在第 i 次行程中进行 n-i 次比较。
-
如何进行域名备案?是否有快速的域名备案方法?
-
有哪些方法可以删除苹果 mac 电脑中的照片?
-
改进软件的 6 种可用性测试方法 - 最后:以下完整的软件测试视频教程已经整理上传完成,有需要的朋友可以自行获取 保证 100%免费!