Mysql 在名称字段上,选择ID最低的行
我正在进行类似的搜索:Mysql 在名称字段上,选择ID最低的行,mysql,sql,group-by,Mysql,Sql,Group By,我正在进行类似的搜索: select id, company_name from cars where company_name='Audi'; 输出为: +--------+----------------------+ | id | company_name | +--------+----------------------+ | 349115 | Audi | | 349117 | Audi | |
select id, company_name from cars where company_name='Audi';
输出为:
+--------+----------------------+
| id | company_name |
+--------+----------------------+
| 349115 | Audi |
| 349117 | Audi |
| 349118 | Audi |
| 349119 | Audi |
| 349120 | Audi |
| 349121 | Audi |
| 349122 | Audi |
| 349123 | Audi |
因为我只想看到每家汽车公司一次,所以我:
select id, company_name from cars where company_name='Audi' group by company_name;
以及输出:
+--------+----------------------+
| id | company_name |
+--------+----------------------+
| 349115 | Audi |
我只返回了一条记录,并且该记录的ID是表中最低的。这就是我想要的。我已经对此进行了测试,如果有多条记录(找到的汽车)用于搜索,groupby
始终返回ID最低的记录(作为第一条记录输入数据库)
这是一条规则,还是巧合?
groupby
是否总是返回ID最低的记录,因此我可以信赖?groupby
不保证返回第一行;它从一个或多个不确定行返回值。您不应该使用这种结构,这种结构只有在MySQL中才允许使用
使用加入
和分组方式
:
select c.*
from cars c join
(select company_name, min(id) as minid
from cars
group by company_name
) cc
on c.id = cc.minid;
如果您有一家公司并且想要一行:
select c.*
from cars c
where company_name = 'Audi'
order by id
limit 1;
不,您不能依赖于此,但您可以在不属于group by子句的列上使用聚合函数,因此您可以将min(id)设置为id是主键吗?不,不依赖于此。在除MySQL之外的大多数其他RDBMS中,该查询都是语法错误-如果您想要最低的一个,请使用
MIN(id)