为CAR Type类别生成唯一ID的SQL实现需求
需求说明
现有一张名为car的数据表,结构及数据如下:
| CAR Type | Colour |
|---|---|
| Porsche | Red |
| Porsche | Blue |
| Mercedes | Yellow |
| VW | Yellow |
| VW | RED |
需要实现:为每种不同的CAR Type分配唯一ID,相同CAR Type的记录共用同一个ID,期望输出结果如下:
| ID | CAR Type | Colour |
|---|---|---|
| 1 | Porsche | Red |
| 1 | Porsche | Blue |
| 2 | Mercedes | Yellow |
| 3 | VW | Yellow |
| 3 | VW | RED |
解决方案
通用SQL(支持窗口函数的数据库:MySQL 8+、PostgreSQL、SQL Server、Oracle等)
使用DENSE_RANK()窗口函数,根据CAR Type排序生成连续唯一ID:
SELECT DENSE_RANK() OVER (ORDER BY `CAR Type`) AS ID, `CAR Type`, Colour FROM car;
兼容低版本数据库(如MySQL 5.x)的SQL
如果数据库不支持窗口函数,可通过子查询实现:
SELECT (SELECT COUNT(DISTINCT `CAR Type`) FROM car c2 WHERE c2.`CAR Type` <= c1.`CAR Type`) AS ID, c1.`CAR Type`, c1.Colour FROM car c1 ORDER BY ID, Colour;
内容的提问来源于stack exchange,提问作者24ngusl
相关产品推荐
相关产品推荐

