【问题标题】:Using DISTINCT and COUNT together一起使用 DISTINCT 和 COUNT
【发布时间】:2013-12-28 11:25:06
【问题描述】:

我有两个不同的 product_id,每个都有多个关键字。 以下语句无效:

SELECT distinct product_id, COUNT(distinct keyword) as keyword_sum FROM data;

目前结果如下:

product_id     keyword_sum
2              47

想要的结果如下所示:

product_id     keyword_sum
2              26
3              21

非常感谢任何帮助!

【问题讨论】:

    标签: mysql sql database count distinct


    【解决方案1】:

    按您希望唯一的列分组,然后您可以在组的每个元素上使用 count 等聚合函数。

    SELECT product_id, COUNT(distinct keyword) as keyword_sum 
    FROM data
    GROUP BY product_id
    

    【讨论】:

    • 请注意,使用 GROUP BY 的隐式排序已被弃用,因为 MySQL 版本 >= 5.6,因此您需要使用显式 GROUP BY product_id ORDER BY product_id ASC 或 GROUP BY product_id ORDER BY NULL 如果您不需要/想要排序的开销..这应该是未来的证明..
    • @RaymondNijland:不确定你的意思。你有这个链接吗?
    • @juergen d 我已经很好地找到了一些链接bugs.mysql.com/bug.php?id=30477dev.mysql.com/doc/refman/5.6/en/select.html -> qoute "不推荐使用 MySQL 5.6 中的隐式 GROUP BY 排序。要实现分组结果的特定排序顺序, 最好使用显式 ORDER BY 子句”...主要问题是 MySQL 使用隐式 ORDER BY 和 GROUP BY 这违反了 ANSI SQL 条款,Oracle 将在未来的 MySQL 5.7 版中改变这种旧行为m12 仍将具有已弃用的旧行为,不确定最终版本是否也将具有它...
    • @RaymondNijland:第一个链接如果来自 2007,是的,您应该在需要时定义一个特定的排序。这适用于所有数据库系统。但是,如果您不需要特定的排序顺序,则不要定义一个。它只会消耗性能,因此如果您不需要它,请不要使用它。当然订购by null 是愚蠢的。
    • @juergen d 第一个链接确实很旧(这确实是一个旧的功能请求)..第二个链接是最重要的一个.. MySQL 是唯一我知道使用隐式的数据库引擎在不使用 ORDER BY 的情况下使用 GROUP BY 对结果进行排序。我同意 ORDER BY NULL 是一个奇怪甚至愚蠢的声明来禁用使用 off filesort,但它在 MySQL 的手册(第二个链接)内
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-05
    • 1970-01-01
    • 2015-04-23
    • 2013-09-18
    • 1970-01-01
    • 2010-12-04
    相关资源
    最近更新 更多