MySQL查询与选择不同与1套

时间:2018-09-08 06:58:07

标签: mysql

我有下表标签1

+------+------+
|app   |val   |
+------+------+
|1     |A     |
+------+------+
|2     |B     |
+------+------+
|2     |A     |
+------+------+
|3     |B     |
+------+------+ 
|1     |B     |
+------+------+
|3     |A     |
+------+------+

我需要MySQL查询,其结果如下表tab1

+------+------+
|1     |A     |
+------+------+
|2     |B     |
+------+------+
|3     |B     |
+------+------+
|1     |B     |
+------+------+ 
|2     |A     |
+------+------+
|3     |A     |
+------+------+

我需要MySQL查询,其结果如下表tab1

即,首先从列应用程序中选择1个不同的值,然后再选择其他不同的值集,依此类推

1 个答案:

答案 0 :(得分:0)

您可以根据应用分配行号,然后订购

SELECT S.*
FROM
(
SELECT T.*,
        IF (T.APP <> @P,@RN:=1,@RN:=@RN+1) RN,
        @P:=T.APP P
FROM T 
CROSS JOIN (SELECT @RN:=0,@P:=0) R 
ORDER BY APP
) S
ORDER BY RN,APP;

结果

+------+------+------+------+
| app  | val  | RN   | P    |
+------+------+------+------+
|    1 | A    |    1 |    1 |
|    2 | B    |    1 |    2 |
|    3 | B    |    1 |    3 |
|    1 | B    |    2 |    1 |
|    2 | A    |    2 |    2 |
|    3 | A    |    2 |    3 |
+------+------+------+------+
6 rows in set (0.00 sec)

但是我不认为val始终是正确的val,因为数据没有以任何特定顺序存储,并且在提供所提供的样本数据的情况下,无法强制执行顺序。如果有一种方法可以在数据中建立顺序,例如auto_increment字段或时间戳,则应在解决方案中使用它。