和前面一篇文章中的表格不同之处在于:偶数行的排序不再是从左到右是递增的,而是递减,或者说是从右到左递增。
完整的规则:
-
有一张 5 x 5 的表格,我们要往这张表格中填充 1~25 的数字;
-
如果是奇数行,则从左到右填充数字;如果是偶数行,就需要按从右到左的顺序填入数字。
-
先从表格的左上角(即第一行第一列)填入数字 “1”,在第一行第二列填入“2”,直到把第一行填满;
-
当上一行填满的时候,就开始往下一行填数据。比如,第二行要从右往左依次填入“6”、“7”、“8”、“9”、“10”。
-
循环反复,直到所有空格都填满数字。
接下来,我们将实现这个需求。
第一步,生成 1~25 的数。
WITH recursive t_seq (num) AS
(SELECT
1 AS num
UNION ALL
SELECT
num + 1 AS num
t_seq
WHERE num < 25)
SELECT * FROM t_seq
第二步,生成每个数对应的组号/行号。
x0 AS
(SELECT
CEIL(num / 5) AS group_no
t_seq)
SELECT * FROM x0
第三步,动态排序。
若是奇数行,则组内默认按升序排序,反之,则是降序排序。
使用
IF(是偶数行, - 1 * 原排序字段, 原排序字段) AS 新排序字段
可以达到依据条件实现动态排序的效果。
x1 AS
(SELECT
IF(group_no % 2 = 0, - 1 * num, num) AS ordered,
row_number () over () AS seq
ORDER BY group_no,
ordered)
SELECT * FROM x1
注意,我们在 SQL 中加入了一个新字段 seq,seq 存储的是 1~25 的自然数,它将作为后面步骤的行转列的依据。
执行上面的 SQL ,部分结果如下。
num group_no ordered seq
------ -------- ------- --------
1 1 1 1
2 1 2 2
3 1 3 3
4 1 4 4
5 1 5 5
10 2 -10 6
9 2 -9 7
8 2 -8 8
7 2 -7 9
6 2 -6 10
第四步,行转列。
x2 AS
(SELECT
group_no AS row_no,
MAX(IF(seq % 5 = 1, num, NULL)) AS A,
MAX(IF(seq % 5 = 2, num, NULL)) AS B,
MAX(IF(seq % 5 = 3, num, NULL)) AS C,
MAX(IF(seq % 5 = 4, num, NULL)) AS D,
MAX(IF(seq % 5 = 0, num, NULL)) AS E
GROUP BY group_no)
SELECT
A, B, C, D, E
最终的实现效果>>>
A B C D E
------ ------ ------ ------ --------
1 2 3 4 5
10 9 8 7 6
11 12 13 14 15
20 19 18 17 16
21 22 23 24 25
很多时候需要在查询时产生顺序的数字记录,下面两个方法非常实用:1.利用系统表
;with t as( SELECT x = ROW_NUMBER() OVER (ORDER BY s1.[object_id]) FROM sys.objects AS s1 CROSS JOIN sys.objects AS...
没有现成方法,网上都用通用表表达式递归生成。今天想到一个还算简单的方法,记录下来:
select row_number() over (order by (select 1)) from String_Split(space(6),' ')
生成1-7连续...
本文是“打印矩阵”系列的第三篇文章。我们再次把难度提升,使用 SQL 打印出如下表所示的矩阵。规则:使用 1~25 的数字依序填充矩阵;从第一行第一列开始填充,沿着列的方向进行。如果是奇数列,从上往下填;如果是偶数列,则从下往上填;第一列填满就到第二列,再到第三列,直到把矩阵都填满。这个需求比前两篇的复杂度高,主要在于我们没法一下子看出每行数据出现的规律。没思路?没关系,继续往下看就是了。第一步,...
很久没怀疑过自己的智商了,直到遇见这 3 道题。你也来试试!这 3 道巨难的题目,来自 itpub 的 SQL 数据库编程大赛。说起 itpub 就不得不说它与 Oracle 的渊源,多少大师都在这里诞生。想成为 SQL 大师,有个最快的方法,就是刷题。如果能刷遍这里的题,Oracle 工作,十拿九稳。当年支付宝首席数据库架构师冯大-冯春培,就是典范。好了,闲话不说,上题!1,5X5方格棋盘难题在...
数据库 和 数据库管理系统
人们通常用数据库这个术语来代表他们使用的数据库软件,这是不正确的,也因此产生了许多混淆。确切地说,数据库软件应称为数据库管理系统( DBMS)。数据库是通过 DBMS 创建和操纵的容器,而具体它究竟是什么,形式如何,各种数据库都不一样。
表具有一些特性,这些特性定义了数据在表中如何存储,包含存储什么样的数据,数据如何分解,各部分信息如何命名...
项目中使用了Apollo进行配置管理
application.properties中配置如下
spring.elasticsearch.jest.uris=${spring.elasticsearch.jest.uris}
spring.elasticsearch.jest.read-timeout=${spring.elasticsearch.jest.read-timeout}
sp...
转载地址:https://www.cnblogs.com/slowcity/p/11727579.html
Elasticsearch Java API有四类client连接方式:TransportClient、 RestClient 、Jest、 Spring_Data_Elasticsearch。其中TransportClient、 RestClient是Elasticsearch原生的api,TransportClient会在8.0版本中完成删除,替代的是HighLevelRestClient,..
什么是滚动查询?
scroll 查询 可以用来对 Elasticsearch 有效地执行大批量的文档查询,而又不用付出深度分页那种代价。
scroll查询允许我们 先做查询初始化,然后再批量地拉取结果。 这有点儿像传统数据库中的 游标(cursor) 。
如果一次性要查出来比如10万条数据,那么性能会很差,此时一般会采取用scroll滚动查询,一批一批的查,直到所有数据都查询完处理完。
scrol...
完整版【es系列教程】,可移步公众号带着问题学习才高效1、Bool query 的子句有哪些类型?2、如何应用 Bool query?结合实际场景分析3、minimum_should_match 参数如何配置?ps:本文设计到的相关性评分,近期TeHero会专门讲解!本文知识导航图01 查询和过滤上下文在学习 Bool query 之前,我们应该先了解ES的两种上下文:1)Query conte...