MySQL组由多列发布

时间:2017-03-21 00:22:44

标签: mysql sql group-by

下面的查询将每个用户的临时概述数据收集到内存表中。基本上,用户看到,按关键字计算项目数。

问题是,它按keyword_id计算项目总数。

我需要的是,item_countkeyword_iditem_typeItem)计算type

 SELECT
        `Item`.`user_id` AS `user_id` ,
        `ItemKeyword`.`keywordID` AS `keyword_id` ,
        `Keyword`.`title` AS `keyword_title`,
        count(`ItemKeyword`.`ItemID`) AS `ico_count`
    FROM
        (
            (
                `ItemKeyword`
                JOIN `Item` ON(
                    (
                        `Item`.`id` = `ItemKeyword`.`ItemID`
                    )
                )
            )
            JOIN `Keyword` ON(
                (
                    `Keyword`.`id` = `ItemKeyword`.`keywordID`
                )
            )
        )
    GROUP BY
        `Item`.`user_id` ,
        `ItemKeyword`.`keywordID`;

详细

例如,现在结果如下所示

enter image description here

基本上,item_count是所有item_type的总和。我需要的是,将结果分开

user_id   keyword_id  keyword_title   item_count
1         9645         surveillance    20

这样的事情:

user_id   keyword_id  keyword_title   item_count item_type
1         9645         surveillance    18           1
1         9645         surveillance    2            2

item_countkeyword_id同时计算item_type

我无法弄清楚如何将item_type也包含在此查询中。

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

我不明白你对括号(括号)的喜爱。为什么这么多?在我看来,你失去了可读性。这只是一个侧面说明。

如果您需要额外的分组级别,则需要修改查询,如下所示:

SELECT
    `Item`.`user_id` AS `user_id` ,
    `ItemKeyword`.`keywordID` AS `keyword_id` ,
    `Keyword`.`title` AS `keyword_title`,
    count(`ItemKeyword`.`ItemID`) AS `ico_count`,
    `Item`.`type` AS `item_type` 
FROM `ItemKeyword` JOIN `Item` ON
     `Item`.`id` = `ItemKeyword`.`ItemID`
  JOIN `Keyword` ON
     `Keyword`.`id` = `ItemKeyword`.`keywordID`
GROUP BY
    `Item`.`user_id` ,
    `Item`.`type` ,
    `ItemKeyword`.`keywordID`,
    `Keyword`.`title`;