MySQL如何选择第1列排序的第2列的唯一值?

时间:2013-12-19 01:37:34

标签: mysql select sql-order-by

我有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|
+-+

2 个答案:

答案 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;