count()
count(string|\think\db\Raw $field = '*') : int
COUNT查询
Parameters
string|\think\db\Raw | $field | 字段名 |
聚合查询
<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006~2019 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
declare (strict_types = 1);
namespace think\db\concern;
use think\db\Raw;
/**
* 聚合查询
*/
trait AggregateQuery
{
/**
* 聚合查询
* @access protected
* @param string $aggregate 聚合方法
* @param string|Raw $field 字段名
* @param bool $force 强制转为数字类型
* @return mixed
*/
protected function aggregate(string $aggregate, $field, bool $force = false)
{
return $this->connection->aggregate($this, $aggregate, $field, $force);
}
/**
* COUNT查询
* @access public
* @param string|Raw $field 字段名
* @return int
*/
public function count(string $field = '*'): int
{
if (!empty($this->options['group'])) {
// 支持GROUP
$options = $this->getOptions();
$subSql = $this->options($options)
->field('count(' . $field . ') AS think_count')
->bind($this->bind)
->buildSql();
$query = $this->newQuery()->table([$subSql => '_group_count_']);
$count = $query->aggregate('COUNT', '*');
} else {
$count = $this->aggregate('COUNT', $field);
}
return (int) $count;
}
/**
* SUM查询
* @access public
* @param string|Raw $field 字段名
* @return float
*/
public function sum($field): float
{
return $this->aggregate('SUM', $field, true);
}
/**
* MIN查询
* @access public
* @param string|Raw $field 字段名
* @param bool $force 强制转为数字类型
* @return mixed
*/
public function min($field, bool $force = true)
{
return $this->aggregate('MIN', $field, $force);
}
/**
* MAX查询
* @access public
* @param string|Raw $field 字段名
* @param bool $force 强制转为数字类型
* @return mixed
*/
public function max($field, bool $force = true)
{
return $this->aggregate('MAX', $field, $force);
}
/**
* AVG查询
* @access public
* @param string|Raw $field 字段名
* @return float
*/
public function avg($field): float
{
return $this->aggregate('AVG', $field, true);
}
}