Mysql 如何仅从一列中选择不同的值
我有以下记录:Mysql 如何仅从一列中选择不同的值,mysql,Mysql,我有以下记录: key | name -------------- 1111 | aa 1111 | bb 2222 | cc 当键值不同时,我需要选择键和名称。当我尝试时: select distinct key, name from table; 我得到了所有的行,因为查询对以下列的组合采用了distinct:key和name。但是,我需要的只是不同的键,我不关心名称。我有很多记录,所以我需要一个实用的方法。查询: SELECT `key`, MAX(`name`) as
key | name
--------------
1111 | aa
1111 | bb
2222 | cc
当键
值不同时,我需要选择键
和名称
。当我尝试时:
select distinct key, name from table;
我得到了所有的行,因为查询对以下列的组合采用了distinct:key
和name
。但是,我需要的只是不同的键
,我不关心名称
。我有很多记录,所以我需要一个实用的方法。查询:
SELECT `key`, MAX(`name`) as name
FROM `table`
GROUP BY `key`
这将为键
的每个不同值返回一行,名称
的值是从该组中的行中任意选择的。实际上,MySQL倾向于从组中第一个物理存储的行返回name的值,但这不能保证
正如其他答案所示,您可以将名称放入聚合表达式。如果您不关心未分组字段,请尝试此查询-
select key, name from table group by key order by name
MySQL允许在不使用聚合函数的情况下选择字段
按名称排序有助于从组中选择名字。为什么不只是:
SELECT distinct key
FROM table
或
这个怎么样:
select * from table group by key having count(key) = 1
我相信这是无效的SQL,尽管MySQL接受它并返回一些东西。此外,这个“某物”是具有相同键的名称集合中的随机名称,因此结果是不确定的(取决于表的删除和插入)。这是毫无意义的,也会在那些还没有掌握聚合概念的人中间造成误解。我不能说它是无效的。MySQL允许它,我们可以使用它。我同意随机记录;应该有聚合函数,或ORDERBY子句-这将有助于选择准确的值。我将编辑我的答案。根据ANSI/ISO SQL,它是无效的,因为它会导致不明确的结果。据我所知,MySQL和SQLite是唯一允许这种形式的RDBMS实现。其他RDBMS产品返回一个错误。
SELECT key, name
FROM table
GROUP BY key
select * from table group by key having count(key) = 1