【问题标题】:Using SELECT DISTINCT in MYSQL在 MYSQL 中使用 SELECT DISTINCT
【发布时间】:2010-06-22 08:12:20
【问题描述】:

一直在进行大量搜索,但还没有真正找到我的 MYSQL 问题的答案。

SELECT DISTINCT name, type, state, country FROM table

1,795 条记录的结果

SELECT DISTINCT name FROM table

1,504 条记录的结果

对于每个重复的“名称”...“类型”、“州”、“国家”在每条记录中都不匹配。

试图弄清楚如何将关联的行选择为 DISTINCT 名称,而不检查它们是否为 DISTINCT

【问题讨论】:

  • 跟php没有关系,所以我把标签删了
  • 恐怕我很难理解您的问题。您能否发布数据的精简版本,并解释您想要什么?
  • 您可能想要添加输出样本。类似于 ... 这里有 3 行名称重复但类型、州、国家/地区不同。 [这里有 3 行 :-)] 我想要 [期望的输出行]

标签: sql mysql distinct


【解决方案1】:
SELECT name, type, state, country FROM table GROUP BY name;

应该可以解决问题。

【讨论】:

  • 对于分组的列,您不需要 distinct。正如定义的group by name 用相同的name 总结所有内容。所以每个name 在结果中都是唯一的
  • 你检查了那个查询吗? IMO 需要对不在 group by 子句中的任何列进行任何形式的聚合。
  • 请注意:根据这篇文章dev.mysql.com/doc/refman/5.0/en/group-by-hidden-columns.html 使用此功能时,每个组中的所有行对于从 GROUP BY 部分省略的列都应该具有相同的值。当您按“名称”分组并且单个“名称”值有多个“类型”/“州”/“国家”时,MySQL 将为每个“类型”/“州”/“国家”值名称”在结果集中。
  • 对我来说非常令人惊讶的是 mysql 不需要在非分组列上指定聚合。它在他们身上返回了什么?分钟?
  • @FrantišekŽiačik 它返回的内容取决于排序。例如:GROUP BY name ORDER BY state DESC 将返回具有该名称最高状态的每个唯一名称。尽管 MySQL 违反了 SQL 标准,但我发现这种行为有时非常有用。
【解决方案2】:

如果您想要不同的名称,您必须决定您想要的每个不同名称可能出现的多个值中的哪一个。例如,您可能需要最小值或计数:

SELECT name, min(type), min(state), count(country) FROM table GROUP BY name

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-16
    • 2015-01-28
    • 1970-01-01
    • 2020-03-25
    • 1970-01-01
    • 1970-01-01
    • 2018-01-01
    相关资源
    最近更新 更多