- 查询语言.aggregate
- 记录数量 count
- 平均值 avg
- 最大值 max
- 最小值 min
- 合计 sum
查询语言.aggregate
数据库聚合查询功能。
引入相关类
- use Tests\Database\DatabaseTestCase as TestCase;
记录数量 count
计算记录数量。
函数原型
public function findCount(string $field = '*', string $alias = 'row_count', bool $flag = false);
::: tip
可使用 findCount()
或者 count()->find()
来统计记录行。
:::
public function testBaseUse()
{
$connect = $this->createDatabaseConnectMock();
$sql = <<<'eot'
[
"SELECT COUNT(*) AS row_count FROM `test` LIMIT 1",
[],
false,
null,
null,
[]
]
eot;
$this->assertSame(
$sql,
$this->varJson(
$connect->table('test')->
count()->
findOne(true)
)
);
$sql = <<<'eot'
[
"SELECT COUNT(`test`.`id`) AS row_count FROM `test` LIMIT 1",
[],
false,
null,
null,
[]
]
eot;
$this->assertSame(
$sql,
$this->varJson(
$connect->table('test')->
count('id')->
findOne(true),
1
)
);
$sql = <<<'eot'
[
"SELECT COUNT(`test`.`id`) AS count1 FROM `test` LIMIT 1",
[],
false,
null,
null,
[]
]
eot;
$this->assertSame(
$sql,
$this->varJson(
$connect->table('test')->
count('id', 'count1')->
findOne(true),
2
)
);
$sql = <<<'eot'
[
"SELECT COUNT(`test`.`id`*50) AS count1 FROM `test` LIMIT 1",
[],
false,
null,
null,
[]
]
eot;
$this->assertSame(
$sql,
$this->varJson(
$connect->table('test')->
count('{[id]*50}', 'count1')->
findOne(true),
3
)
);
}
平均值 avg
计算平均值。
public function testAvg()
{
$connect = $this->createDatabaseConnectMock();
$sql = <<<'eot'
[
"SELECT AVG(`test`.`id`) AS avg_value FROM `test` LIMIT 1",
[],
false,
null,
null,
[]
]
eot;
$this->assertSame(
$sql,
$this->varJson(
$connect->table('test')->
avg('id')->
findOne(true)
)
);
}
最大值 max
计算最大值。
public function testMax()
{
$connect = $this->createDatabaseConnectMock();
$sql = <<<'eot'
[
"SELECT MAX(`test`.`num`) AS max_value FROM `test` LIMIT 1",
[],
false,
null,
null,
[]
]
eot;
$this->assertSame(
$sql,
$this->varJson(
$connect->table('test')->
max('num')->
findOne(true)
)
);
}
最小值 min
计算最小值。
public function testMin()
{
$connect = $this->createDatabaseConnectMock();
$sql = <<<'eot'
[
"SELECT MIN(`test`.`num`) AS min_value FROM `test` LIMIT 1",
[],
false,
null,
null,
[]
]
eot;
$this->assertSame(
$sql,
$this->varJson(
$connect->table('test')->
min('num')->
findOne(true)
)
);
}
合计 sum
计算合计。
public function testSum()
{
$connect = $this->createDatabaseConnectMock();
$sql = <<<'eot'
[
"SELECT SUM(`test`.`num`) AS sum_value FROM `test` LIMIT 1",
[],
false,
null,
null,
[]
]
eot;
$this->assertSame(
$sql,
$this->varJson(
$connect->table('test')->
sum('num')->
findOne(true)
)
);
}