在名称字段上选择GROUP BY,选择ID最低的行

时间:2015-12-28 13:56:52

标签: mysql sql group-by

我正在进行类似的搜索:

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最低。这就是我想要的。我一直在测试这个,如果搜索有多个记录(找到汽车),group by总是返回ID最低的记录(作为第一个记录输入到数据库的记录)。

这是一个规则group by还是仅仅是巧合? group by总是返回ID最低的记录,所以我可以依赖它吗?

2 个答案:

答案 0 :(得分:0)

GROUP BY无法保证返回第一行;它返回不确定行的值。你不应该使用这种结构,只能在MySQL中使用。

使用joingroup by

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;

答案 1 :(得分:0)

不,您不能依赖于此,但您可以在不属于group by子句的列上使用聚合函数,因此您可以将min(id)