【发布时间】:2020-10-03 07:11:03
【问题描述】:
+--------+-------+
| client | price |
+--------+-------+
| 54 | 25 |
| 648 | 35 |
| 54 | 10 |
| 648 | 8 |
| 54 | 25 |
| 648 | 35 |
+--------+-------+
上面说的是我的表架构是如何设置的,我想计算每个client 最频繁的price 值,例如。
+--------+-------+
| client | price |
+--------+-------+
| 54 | 25 |
| 648 | 35 |
+--------+-------+
我在 MySQL 中很难做到这一点。我在 PHP 中是这样完成的:
$clientPrices = $this->database->select('design', [
'clientid',
'price'
]);
$pricesByClients = [];
foreach ($clientPrices as $value) {
$pricesByClients[$value['clientid']][] = $value['price'];
}
foreach ($pricesByClients as $key => $value) {
$priceCount = array_count_values($value);
$mode = array_search(max($priceCount), $priceCount);
$pricesByClients[$key] = $mode;
}
return $pricesByClients;
但是,这很慢,我希望能提高效率或在 SQL 中完成。
编辑:这是 MySQL 5.* 而不是 8.
【问题讨论】:
-
请发布 MySQL 的版本以及您使用的数据库库 (
$this->database)。
标签: php mysql group-by count greatest-n-per-group