我希望能够按字段id
对结果集进行排序,然后在列name
上过滤掉重复的值。
给出一个表
+----+------+-------+
| id | name | other |
+----+------+-------+
| 1 | a | 1 |
| 2 | a | 0 |
| 3 | b | 0 |
| 4 | c | 0 |
+----+------+-------+
我的排序如下:2, 4, 1, 3
。
因此,我希望结果看起来像:
+----+------+-------+
| id | name | other |
+----+------+-------+
| 2 | a | 0 |
| 4 | c | 0 |
| 3 | b | 0 |
+----+------+-------+
毕竟,在排序结果集中,id = 2
行显示在id = 1
行之前,而他们共享name
。在这种情况下,只应保留第一个name
。
简而言之:
SELECT *
FROM table
ORDER BY FIELD(id, 2, 4, 1, 3)
GROUP BY name
不幸的是,无论订单是什么,MySQL都会选择返回哪些行包含一个非唯一的name
。
我已阅读this solution,但它仅涵盖DESC
(和间接ASC
)的排序,但不包括FIELD
的排序。
如果考虑到排序算法,在某个列重复的情况下,只返回第一行的方法是什么?