MySQL:选择名称唯一的所有行

时间:2018-10-23 21:02:31

标签: mysql select distinct

我目前正在尝试仅在名称列中选择唯一条目。我尝试使用此查询,但它不会返回相同的价格。我尝试了其他变体也没有成功。

SELECT DISTINCT name, price from table;

这是我正在使用的桌子:

+----+-------------------+
| id | name      | price |
+----+-----------+-------+
| 1  | Henry     | 20    |
| 2  | Henry     | 30    |
| 3  | Robert    | 20    |
| 4  | Joshua    | 10    |
| 5  | Alexander | 30    |
+----+-----------+-------+

我正在寻找的输出是:

+----+-------------------+
| id | name      | price |
+----+-----------+-------+
| 1  | Henry     | 20    |
| 3  | Robert    | 20    |
| 4  | Joshua    | 10    |
| 5  | Alexander | 30    |
+----+-----------+-------+

您可以看到,所需的输出仅删除了重复的名称,没有价格。我可以在上面的查询中添加一些内容,以便仅在“名称”列中选择唯一的条目吗?非常感谢任何帮助,因为我试图在这里找到解决方案,例如Google,DuckDuckGo等,但是没有运气。

3 个答案:

答案 0 :(得分:0)

根据您的示例数据,这应该可以工作。

SELECT MIN(Id) AS Id, name, MIN(price) AS price 
FROM table
GROUP BY name;

答案 1 :(得分:0)

GROUP BY的用途是

SELECT * FROM `table` GROUP BY `name`

通常是人run into trouble,因为当给定名称有多个匹配项时,他们现在将得到任意选择的行-您必须使用聚合函数来选择特定的行,例如“价格最高的那个”。

但是在您的情况下,由于您似乎并不关心返回哪一行,因此按原样完美。

答案 2 :(得分:0)

因此,您要选择不同的行列表,然后从表中选择给定的整个行?请尝试以下查询,其中临时查询只是唯一ID的列表,然后将该行链接回表。

Select n.*
From nameprices n
Join (Select MIN(id) as id
  From nameprices
  Group by name
  Order By id) aTemp On (aTemp.id=n.id);

这是SQL查询中的一个常见问题,我们要使用给定的全行数据,但过滤器使用的是不重复/分组方式。