MySQL连表分组统计使用count查询出数据不准确问题解决方案

先上两副图

这里有两张表:score表和year_as表,要求统计出score表按年份分组的个数,且查询出来的内容需要包括year_as表中的year_as字段.

使用正常连表并分组统计count得出的SQL和对应结果如下:

SELECT
    b.`year`,
    b.year_as,
    COUNT(a.`id`) AS num
FROM
    `score` AS a
LEFT JOIN `year_as` AS b
ON
    a.`year` = b.`year`
GROUP BY
    a.`year`
ORDER BY
    num
DESC

 

这数据明显是不对的,因为score表中的2008只有3条,怎么查询出来是15条呢? 

 于是可以推导:count函数是在连表后才统计的(score表中2008的数据 * year_as表中2008的数据 = 15),统计完后再分组

解决方案是:先

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
使用 MySQL 的 GROUP BY 子句时,如果对结果集进行 COUNT 操作,可能会现不准确的结果。这是因为 GROUP BY 会将结果集根据指定的列进行分组,而 COUNT 操作是对整个结果集进行计数。如果一个分组有多行数据,那么 COUNT 操作会将这个分组的所有行计数为一行。 为了解决这个问题,可以使用 PHP 的 array_count_values() 函数。该函数可以统计一个数组各个元素现的次数,并返回一个关联数组,其键是数组元素,值是现的次数。 具体实现方法如下: 1.使用 MySQL 查询需要处理的数据,并将结果保存到一个数组; 2.使用 PHP 的 array_group_by() 函数对数组进行分组; 3.对每个分组使用 array_count_values() 函数进行计数,并将结果保存到一个新的数组。 下面是一个示例代码: ``` // 连接数据库 $conn = mysqli_connect("localhost", "username", "password", "dbname"); // 查询数据 $sql = "SELECT * FROM table"; $result = mysqli_query($conn, $sql); // 将结果保存到数组 $data = array(); while ($row = mysqli_fetch_assoc($result)) { $data[] = $row; } // 对数组进行分组 function array_group_by($arr, $key) { $grouped = array(); foreach ($arr as $value) { $grouped[$value[$key]][] = $value; } return $grouped; } $grouped_data = array_group_by($data, 'column_name'); // 对每个分组进行计数 $counted_data = array(); foreach ($grouped_data as $key => $group) { $counted_data[$key] = count($group); } // 输结果 print_r($counted_data); ``` 注意:这种方法适用于数据量不大的情况,如果数据量很大,可能会影响性能。在这种情况下,最好直接使用 MySQLCOUNT 函数,并对查询语句进行优化。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值