如何在mysql中获取有序查询

时间:2018-02-15 15:30:29

标签: mysql sql

我有2个表,动物和人,我正在使用UNION进行查询以获得两个表的组合列表,但我希望每4个动物我看一个人,即:

结果:

*animal 1
animal 2
animal 3
animal 4*
**person 1**
*animal 5
animal 6
animal 7
animal 8*
**person 2**
etc...

有什么办法吗?

请帮助我!

1 个答案:

答案 0 :(得分:2)

DEMO: using rextester

使用用户变量,您通常可以模拟企业数据库中的分析(尽管效率不高)

我们生成派生表(UnionSeq)以生成所需的排序,然后添加我们自己的公式,将生成的row_number乘以4 *,这样它将适合第4个动物后使用列别名seq来确定动物出现在人们面前。然后我们从派生表中选择应用所需的排序。

SELECT Name 
FROM (SELECT ID, Name, (@p:=@P+1)*4 Row_num, 'b' as Seq 
      FROM person
      CROSS JOIN (SELECT @p:=0) a
      UNION ALL
      SELECT ID, Name, @a:=@a+1, 'a' as seq 
      FROM animal
      CROSS JOIN (SELECT @a:=0) b) UnionSeq
ORDER BY Row_num, Seq

给我们:

+----+----------+
|    |   Name   |
+----+----------+
|  1 | Animal 1 |
|  2 | Animal 2 |
|  3 | Animal 3 |
|  4 | Animal 4 |
|  5 | Person 1 |
|  6 | Animal 5 |
|  7 | Animal 6 |
|  8 | Animal 7 |
|  9 | Animal 8 |
| 10 | Person 2 |
| 11 | Animal 9 |
| 12 | Person 3 |
+----+----------+

如果动物的人数不成比例,您的样本数据不会显示该怎么办;所以在我的演示中,我只是让每个表都显示基于模式的所有数据,而不管是否无法维护4x1模式。在这个例子中,你可以看到动物9后面是人3,即使没有4只动物。如果有一个人4,它将跟随第3个人,因为没有更多的动物。

这不是魔术;它是数学和一般SQL过程和操作顺序。