1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
---
source: prqlc/prqlc-parser/src/test.rs
expression: "parse_single(r#\"\nfrom employees\nfilter country == \"USA\" # Each line transforms the previous result.\nderive { # This adds columns / variables.\n gross_salary = salary + payroll_tax,\n gross_cost = gross_salary + benefits_cost # Variables can use other variables.\n}\nfilter gross_cost > 0\ngroup {title, country} ( # For each group use a nested pipeline\n aggregate { # Aggregate each group to a single row\n average salary,\n average gross_salary,\n sum salary,\n sum gross_salary,\n average gross_cost,\n sum_gross_cost = sum gross_cost,\n ct = count salary,\n }\n)\nsort sum_gross_cost\nfilter ct > 200\ntake 20\n \"#).unwrap()"
---
- VarDef:
kind: Main
name: main
value:
Pipeline:
exprs:
- FuncCall:
name:
Ident: from
args:
- Ident: employees
- FuncCall:
name:
Ident: filter
args:
- Binary:
left:
Ident: country
op: Eq
right:
Literal:
String: USA
- FuncCall:
name:
Ident: derive
args:
- Tuple:
- Binary:
left:
Ident: salary
op: Add
right:
Ident: payroll_tax
alias: gross_salary
- Binary:
left:
Ident: gross_salary
op: Add
right:
Ident: benefits_cost
alias: gross_cost
- FuncCall:
name:
Ident: filter
args:
- Binary:
left:
Ident: gross_cost
op: Gt
right:
Literal:
Integer: 0
- FuncCall:
name:
Ident: group
args:
- Tuple:
- Ident: title
- Ident: country
- FuncCall:
name:
Ident: aggregate
args:
- Tuple:
- FuncCall:
name:
Ident: average
args:
- Ident: salary
- FuncCall:
name:
Ident: average
args:
- Ident: gross_salary
- FuncCall:
name:
Ident: sum
args:
- Ident: salary
- FuncCall:
name:
Ident: sum
args:
- Ident: gross_salary
- FuncCall:
name:
Ident: average
args:
- Ident: gross_cost
- FuncCall:
name:
Ident: sum
args:
- Ident: gross_cost
alias: sum_gross_cost
- FuncCall:
name:
Ident: count
args:
- Ident: salary
alias: ct
- FuncCall:
name:
Ident: sort
args:
- Ident: sum_gross_cost
- FuncCall:
name:
Ident: filter
args:
- Binary:
left:
Ident: ct
op: Gt
right:
Literal:
Integer: 200
- FuncCall:
name:
Ident: take
args:
- Literal:
Integer: 20
span: "0:1-714"