按固定序列对齐

本文介绍了一种SQL查询技巧,如何确保即使部分计划ID没有对应的数据记录也能返回固定数量的行。通过使用SPL的align方法,可以实现在指定序列下对结果集进行对齐,即使某些计划ID没有数据也会展示空结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【问题】

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 方法可以很容易实现这个功能。

idplan
11
22
32
41
53
61
73
81

欲实现对 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

imagepng

A3

imagepng

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值