MySQL group_concat 和计数

标签 mysql sql count left-join group-concat

我试图在单个查询中获取每个类别的方面,如下所示:

SELECT b.`id` AS parent_id, b.`name` AS parent_name, 
    a.`id` AS child_id, a.`name` AS child_name, a.`pageid` AS t_id, 
    COUNT( c.`id` ) AS deals_in_cat, 
    d.`aspect_values` AS aspects 
        FROM `category_parent` AS a 
        LEFT JOIN `navigation_filters_weightage` AS d ON a.`id` = d.`cat_id`, 
        `deals_parent_cat` AS b, 
        `deals` AS c 
    WHERE a.`parent_id` = b.`id` 
    AND c.`ebaydeals_category` = a.`id` 
        GROUP BY a.`id`, d.`frequency` 
        ORDER BY b.`order` ASC, a.`order` ASC, d.`frequency` DESC;

这个查询给了我以下结果:

PHPMyAdmin Result

如您所见,一个类别(在本例中为手机)的所有方面都位于单独的行中。我想要的是将所有类别的所有方面都放在一行中。所以,我尝试这个查询:

SELECT b.`id` AS parent_id, b.`name` AS parent_name, 
    a.`id` AS child_id, a.`name` AS child_name, a.`pageid` AS t_id, 
    COUNT( c.`id` ) AS deals_in_cat, 
    GROUP_CONCAT( DISTINCT d.`aspect_values` ORDER BY d.`frequency` DESC ) AS aspects 
        FROM `category_parent` AS a 
        LEFT JOIN `navigation_filters_weightage` AS d ON a.`id` = d.`cat_id`, 
        `deals_parent_cat` AS b, 
        `deals` AS c 
    WHERE a.`parent_id` = b.`id` 
    AND c.`ebaydeals_category` = a.`id` 
        GROUP BY a.`id` 
        ORDER BY b.`order` ASC , a.`order` ASC;

结果如下:

enter image description here

如您所见,手机类别的 count 增加了。手机只有 271 项,但第二个查询几乎将这个数字乘以编号。该类别的方面。

我不确定为什么会这样。欢迎任何想法。

提前致谢。

最佳答案

deals 表中可能有重复的 id 尝试在计数函数中使用 DISTINCT

SELECT b.id AS parent_id, 
    b.name AS parent_name, 
    a.id AS child_id,
    a.name AS child_name, 
    a.pageid AS t_id, 
    count(DISTINCT c.id ) AS deals_in_cat ...

关于MySQL group_concat 和计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23007249/

相关文章:

php - 具有连接的 Doctrine 查询构建器返回实体数组而不是分组结果

python - Django:使用多个键通过中间表创建 M2M 关系

MYSQL统计同一个表中某个问题的答案数

mysql - 将 INNER JOIN 查询与不同值的计数相结合

php - 如何在模型codeigniter中编写TIMESTEMPDIFF QUERY?

mysql - 获取每天的第一条记录,然后仅检查状况

php - 获取刚刚插入MySQL数据库的行的id

sql - SSIS - 除了脚本任务之外的任何其他解决方案

当一个表名没有用单引号引起来时,Mysql会抛出错误

php - mysql求助,统计最后一条记录的信息