pos@z("abcdeffdef","def") //从后往前查找@z
pos@c("abcdef","def") //忽略大小写@c
pos@zc("abcdeffdef","def") //组合使用
//三层参数:分号表示第一级,逗号第二级,冒号第三级
join(orders:o,sellerid;employees:e,eid).groups(e.dept;sum(o.amount))
//无形的lambda语法,更增加[] # ~ 等符号简化运算
stock.sort(tradedate).group@i(price< price[-1]).max(~.len())
//位置筛选与相对位置引用
stock.calc(stock.pselect(price>100),price-price[-1])
//针对分组成员再计算
t("employee.csv").group(dept).select(~.len()>10).conj()
//直接用点(.)逐层引用下层数据
json(file("orders.json").read())orders.select(order_details.select@1(product.category=="electronics") && order_details.sum(price*quantity)>200).new(order_id,order_date)
public mapcalculatemaxconsecutiveincreasedays(list stockrecords) { map > groupedbycode = stockrecords.stream() .collect(collectors.groupingby( stockrecord::getcode, collectors.collectingandthen( collectors.tolist(), list -> { list.sort(comparator.comparing(stockrecord::getdt)); return list; } ) )); map result = new hashmap<>(); for (map.entry > entry : groupedbycode.entryset()) { string code = entry.getkey(); list records = entry.getvalue(); if (records.isempty()) continue; map consecutivedaysmap = new hashmap<>(); int cumulativesum = 0; for (int i = 0; i < records.size(); i ) { stockrecord current = records.get(i); int flag; if (i == 0) { flag = 1; } else { stockrecord prev = records.get(i - 1); flag = current.getcl() > prev.getcl() ? 0 : 1; } cumulativesum = flag; consecutivedaysmap.merge(cumulativesum, 1, integer::sum); } int maxdays = consecutivedaysmap.values().stream() .max(comparator.naturalorder()) .orelse(0); result.put(code, maxdays); } return result; }
select code, max(con_rise) as max_increase_days from ( select code, count(*) as con_rise from ( select code, dt, sum(updown_flag) over (partition by code order by code, dt) as no_up_days from ( select code, dt, case when cl > lag(cl) over (partition by code order by code, dt) then 0 else 1 end as updown_flag from stock ) ) group by code, no_up_days ) group by code
simport pandas as pd stock_file = "stockrecords.txt" stock_info = pd.read_csv(stock_file,sep="\t") stock_info.sort_values(by=['code','dt'],inplace=true) stock_group = stock_info.groupby(by='code') stock_info['label'] = stock_info.groupby('code')['cl'].diff().fillna(0).le(0).astype(int).cumsum() max_increase_days = {} for code, group in stock_info.groupby('code'): max_increase_days[code] = group.groupby('label').size().max() – 1 max_rise_df = pd.dataframe(list(max_increase_days.items()), columns=['code', 'max_increase_days'])
stock.sort(dt).group(code;~.group@i(cl< cl[-1]).max(~.len()):mids)
a | |
1 | =connect("mysql") |
2 | =a1.query@x("select o.order_id, o.user_id, o.order_date, oi.product_id, oi.quantity, oi.price from orders o join order_items oi on o.order_id = oi.order_id where o.order_date >= curdate() - interval 1 month") |
3 | =mongo_open("mongodb://192.168.1.15:27017/raqdb") |
4 | =mongo_shell@d(a3, "{ 'find': 'products', 'filter': { 'category': { '$in': ['tablets', 'wearables', 'audio'] } }}” ) |
5 | =a2.join@i(product_id,a4:product_id,name,brand,category,attributes) |
6 | =a5.groups(category;sum(price*quantity):amount) |
esproc提供两种高性能二进制存储格式
结构简单,
无需定义结构
行列混合存储,支持索引,
需事先定义结构
//全集topn,数据库引擎会优化避免大排序
select top 10 * from orders order by amount desc
//组内topn,嵌套后数据库没法优化只能大排序
select * from (
select *, row_number() over (partition by area order by amount desc) rn
from orders )
where rn<=10
a | b | |
1 | =file("orders.ctx").open().cursor() | |
2 | =a1.groups(;top(10;-amount)) | 全集topn |
3 | =a1.groups(area;top(10;-amount)) | 组内topn |