按固定序列对齐
按固定序列对齐
【问题】
I need a query to retrive data select * from table where plan IN(1,2,3,4) group by plan order by id limit 4.
My problem is if the table has atleast one row in each plan then its returning 4 rows for each plan. if the table has no row in any of the plan(i.e say plan 4 has no rows in table) then its returning 3 rows. but i need 4 rows in the order(plan in 1,2,3,4).
【回答】
按指定序列将结果集对齐,在 SQL 中要用 JOIN 拼出——【select numbers.val,plantest.id from plantest right join numbers on numbers.val = plantest.plan group by plan order by id】——需要提供一个存放条件的表 “numbers”存放值 1、2、3、4,或者再用语法生成一个序号表,比较麻烦。
SPL 提供了 align 方法可以很容易实现这个功能。
id | plan |
---|---|
1 | 1 |
2 | 2 |
3 | 2 |
4 | 1 |
5 | 3 |
6 | 1 |
7 | 3 |
8 | 1 |
欲实现对 plan=1、2、3、4 的分组查询并不论有无结果都展现出来:
使用集算器编辑如下代码:
A | |
---|---|
1 | =connect("db") |
2 | =A1.query("select id,plan from `plantest` where plan in('1','2','3','4') group by plan order by id limit 4") |
3 | =A2.align(to(4),plan) |
A1: 连接数据库
A2: 按照 plan 分组查询出 plantest 表中 plan 为 1、2、3、4 的记录,按照 id 排序,并返回前 4 条数据
A3:align()函数把排列按照另一个序列进行排序 / 对齐,第一个参数是对齐的参考序列,第二个参数是 A2 的对齐表达式——也就是 A2 序表根据 A2 中 plan 与 to(4) 构成的序列来对齐([1,2,3,4] 这样的序列恰好可以用 to(4) 来表示),这样就看到了我们想要的结果,空结果也会显示出来
A2
A3