mysql查询,带select distinct,带1个集合

kiz8lqtg  于 2021-06-19  发布在  Mysql
关注(0)|答案(1)|浏览(334)

我有下表tab1

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

我需要mysql查询,结果如下表1所示

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

我需要mysql查询,结果如下表1所示
即,首先从列app中选择1个不同的值,然后选择其他不同的值集,依此类推

fnx2tebb

fnx2tebb1#

您可以根据应用程序分配一个行号,然后按顺序排列

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,因为数据不是以任何特定的顺序存储的,并且没有办法强制给定所提供的示例数据的顺序。如果有一种方法可以在数据中建立顺序,比如自动递增字段或时间戳,那么您应该在解决方案中使用它。

相关问题