当前位置: 首页 > 面试题库 >

如何从MySQL的字段中仅选择第一个不同的匹配项?

伊光赫
2023-03-14
问题内容

如何仅返回MySQL中字段的第一个不同匹配项?

我的表:

name     hash
----------------
Anna     ABC
Barb     DEF
Charlie  GHI
Anna     JKL
Andrea   MNO

我的查询(用于%An%):

SELECT DISTINCT(name) as name, hash FROM my_table WHERE name LIKE '%An%';

这将返回:

name     hash
----------------
Anna     ABC
Anna     JKL
Andrea   MNO

而不是:( 我追求的结果)

name     hash
----------------
Anna     ABC
Andrea   MNO

如何只获得每个唯一名称的第一个匹配项?

我想返回第一个Anna,跳过第二个(以及任何后续的匹配项),但仍然得到Andrea(以及任何其他不同的匹配项,例如AndrewAnthony)。


问题答案:

DISTINCT 不能以这种方式工作,返回的所有列中的值都必须是不同的。

您可以始终在该函数上使用聚合函数,该hash函数GROUP BY name将为hash每个函数返回一个值name

SELECT name, min(hash) hash
FROM my_table 
WHERE name LIKE '%An%' 
GROUP BY name;

请参阅带有演示的SQL Fiddle。

注意:html" target="_blank">集合函数与一起使用GROUP BY将确保您始终返回该hash列的期望值。如果您没有GROUP BY或汇总SELECT列表中的项目,则可能会返回意外结果。(请参阅的MySQL扩展GROUP BY

从MySQL文档中:

MySQL扩展了GROUP BY的使用,以便选择列表可以引用未在GROUP
BY子句中命名的非聚合列。…您可以使用此功能来避免不必要的列排序和分组,从而获得更好的性能。但是,这主要在每个组的每个未聚合列中未在GROUP
BY中命名的所有值都相同时才有用。服务器可以从每个组中自由选择任何值,因此,除非它们相同,否则选择的值是不确定的。此外,通过添加ORDER
BY子句不能影响从每个组中选择值。选择值之后,将对结果集进行排序,并且ORDER BY不会影响服务器选择的值。




 类似资料:
  • 问题内容: 这个问题已经在这里有了答案 : 7年前关闭。 可能重复: 选择MySQL中除一列以外的所有列? 我想知道是否有一种方法可以从数据库的表中选择除一个字段以外的所有其他字段。 我知道我可以在选择查询中描述字段名称。 例如: 但是我的问题是,有没有办法以一种简单的方式做到这一点呢? 我正在使用MySQL和Zend框架。 问题答案: 你可以很容易做到 假设您的字段是id = 5 然后 如果你的

  • 我有两个表客户和订单,下面是结构。 表-客户 ID customer_name 表-订单 ID order_id customer_id customers表包含customers记录,orders表包含客户下的订单, orders表中的customer_id链接到customers表的id字段。 现在一个客户可以有零或一个或多个订单,我想要得到客户下的最后一个订单只。 当我运行以下查询(一个简单

  • 问题内容: 我有一个表和一个表,对于每个有付款的用户,表中可能有多个关联的付款。我想选择所有有付款的用户,但只选择他们最近的付款。我正在尝试使用此SQL,但之前从未尝试过嵌套SQL语句,所以我想知道自己在做什么错。感谢帮助 问题答案: 您需要有一个子查询,以获取每个日期的最新日期。

  • 问题内容: 我只是想知道我可以在php中执行哪种mysql命令,它将从某个表中选择所有项目,其中columna不等于x并且columnb不等于x 就像是: 有任何想法吗? 问题答案: 关键是sql查询,您将其设置为字符串: 请注意,有很多方法可以指定NOT。另一个效果很好的是: 这是如何使用它的完整示例: 您可以在上述while循环内做任何您想做的事情。作为元素访问表中的每个字段,这意味着将为您提

  • 本文向大家介绍如何从MySQL的varchar列中仅选择非数字值?,包括了如何从MySQL的varchar列中仅选择非数字值?的使用技巧和注意事项,需要的朋友参考一下 您需要为此使用REGEXP。语法如下 为了理解这个概念,让我们创建一个表。创建表的查询如下 使用insert命令在表中插入一些记录。查询如下 使用select语句显示表中的所有记录。查询如下 以下是输出 这是选择非数字值的查询 以下

  • 问题内容: 我想做类似于“和”过滤器示例的操作,除了每个示例中都带有“应该”的术语,而不是示例中的字段类型。我提出以下内容: 但是,我收到此错误: 还有另一种方法可以执行我正在尝试执行的操作,还是我走在正确的轨道上?还是在Elasticsearch中这是不可能的? 问题答案: 每个布尔查询子句可以包含多个子句。字词查询(http://www.elasticsearch.org/guide/refe