我有mytable
列(column1 bigint AUTO_INCREMENT PRIMARY KEY, column2 bigint NOT NULL
)。还有一些测试值:
+-+-+
|1|3|
|2|4|
|3|5|
|4|4|
+-+-+
我想选择column1排序的column2的唯一值。所以,我这样做:
SELECT DISTINCT column2 FROM mytable ORDER BY -column1 LIMIT 0, 10
MySQL返回:
+-+
|5|
|4|
|3|
+-+
但是如何实现这个结果?:
+-+
|4|
|5|
|3|
+-+
答案 0 :(得分:1)
我认为你不能那样做。
考虑这个输入(为了清晰起见,我将第二列改为字母)
1 C
2 B
3 A
4 C
5 B
col 2的不同集合是A,B,C。
要按第一列排序,使用哪个版本的C?如果我们使用
1 C
然后结果是C,B,A。
但是如果你使用
4 C
然后结果是B,A,C。
没有一个独特的订单。
现在,如果您想按第2列中每个值的第一次出现排序,那就是另一个故事:
select min(column1), column2
from mytable
group by column2
order by min(column1)
答案 1 :(得分:1)
MySQL似乎首先将DISTINCT函数应用于元组,并且仅在它应用排序之后。您想强制它先进行排序,然后使用子查询应用DISTINCT:
SELECT DISTINCT column2 FROM (
SELECT column2
FROM mytable
ORDER BY -column1
) AS a;