mysql:选择名称不同的所有行

jhkqcmku  于 2021-06-18  发布在  Mysql
关注(0)|答案(3)|浏览(275)

这个问题在这里已经有答案了

sql仅选择列上具有最大值的行[重复](27个答案)
两年前关门了。
我正在尝试只在“名称”列中选择唯一的条目。我尝试过使用这个查询,但它不会返回相同的价格。我也尝试过其他的变体,但都没有成功。

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    |
+----+-----------+-------+

所需的输出,如你所知,只删除了重复的名称,没有价格。有什么我可以添加到我的查询上面只选择唯一的条目在名称列?任何帮助是非常感谢,因为我已经试图找到一个解决方案在这里,谷歌,duckduckgo等没有运气。

xxls0lw8

xxls0lw81#

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

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查询中的一个常见问题,我们希望使用给定的全行数据,但filter使用的是distinct/groupby公式。

slmsl1lt

slmsl1lt2#

从您的示例数据来看,这应该是可行的。

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

pdkcd3nj3#

这是什么 GROUP BY 用于:

SELECT * FROM `table` GROUP BY `name`

通常人们会遇到麻烦,因为当一个给定的名称有多个匹配项时,他们会得到一个任意选择的行—您必须使用聚合函数来选择一个特定的行,例如“价格最高的行”。
但在您的情况下,因为您似乎不关心返回哪一行,所以这是完美的。

相关问题