我的数据如下所示,
Data
A
A
B
B
C
X
D
我想用一个增量值来提取唯一/不同的结果。应该是这样的,
ID VALUE
1 A
2 B
3 C
4 D
5 X
我试过下面的方法,
SET @row := 0;
SELECT @row := @row + 1 , mytable.mycolumn as VALUE
FROM change mytable, (SELECT @row := 0) r;
上面的结果是,
VALUE
1 A
2 A
3 B
4 B
5 C
6 D
7 X
3条答案
按热度按时间umuewwlo1#
如果您使用的是mysql 8+,那么
ROW_NUMBER
这里的方法是:在mysql的早期版本中,您可以通过在首先选择不同的数据值之后使用用户变量生成行号来纠正当前的尝试:
如下面的演示所示,这是可行的。
演示
tv6aics12#
我将从你的尝试开始。问题是您有重复的值。你必须先减少它们。要按字母顺序排列所有唯一值,必须执行以下操作:
现在在您的查询中,将mytable替换为上述查询,作为from中的嵌套select:
一个更简单更干净的解决方案是在较新的mysql/mariadb版本中使用row\ u number函数。你可以这样做:
请注意,我们将order by移到了嵌套查询的外部,因为row\ u number()函数仍然需要order by运算符(无需执行两次)。
有一种更简单的方法可以在没有嵌套查询的情况下删除重复项,那就是使用groupby操作符。上面的查询可以这样重写:
尽管有更干净的代码,但我不会使用groupby,因为虽然它在技术上会产生相同的结果,而且dbms可能足够聪明,可以用selectdistinct的相同方式解析它,但它的用途不同(用于聚合数据)。
eivnm1vs3#
例如,您的表名是mytable,然后使用下面的查询,否则仅用表名替换mytable