A Range Merge Join for PostgreSQL
The objective of this project is to provide an implementation of a range join in PostgreSQL based on the sort-merge paradigm. This project is based on the BSc thesis of Thomas Mannhart.
Examples
Joining available employees with events
Given a relation emps that records employees
(name) working in a department (dept) for the period
eperiod, and a relation events that records events
(event) within a department dept taking place on a specific date
(day). Find which employees are available for a specific event.
name |
dept |
eperiod |
Anton |
Sales |
[01-01-2020, 31-03-2020] |
Thomas |
Marketing |
[01-01-2020, 30-06-2020] |
Michael |
Marketing |
[01-03-2020, 31-12-2020] |
Hans |
Sales |
[01-01-2020, 31-12-2020] |
Thomas |
Accounting |
[01-07-2020, 31-12-2020] |
event |
dept |
day |
Fair CH |
Marketing |
05-03-2020 |
Presentation |
Sales |
15-06-2020 |
Fair IT |
Marketing |
03-08-2020 |
Balance Report |
Accounting |
03-08-2020 |
Product launch |
Marketing |
15-10-2020 |
name |
dept |
event |
day |
Thomas |
Marketing |
Fair CH |
05-03-2020 |
Michael |
Marketing |
Fair CH |
05-03-2020 |
Michael |
Marketing |
Fair IT |
03-08-2020 |
Michael |
Marketing |
Product launch |
15-10-2020 |
Hans |
Sales |
Presentation |
15-06-2020 |
Thomas |
Accounting |
Balance Report |
03-08-2020 |
Joining student marks with grading ranges
Given a relation marks that records students
(name), their student number (snumber) along with their achieved mark
(mark), and a relation grades that records the grade
(grade) to assign when achieving a mark between mmin
mmax. Find for each student the grade to assign.
name |
snumber |
mark |
Anton |
1232 |
23.5 |
Thomas |
4356 |
95 |
Michael |
1125 |
72 |
Hans |
3425 |
90 |
mmin |
mmax |
grade |
0.0 |
18 |
1 |
18.5 |
36 |
2 |
36.5 |
54 |
3 |
54.5 |
72 |
4 |
72.5 |
90 |
5 |
90.5 |
100 |
6 |
name |
snumber |
grade |
Anton |
1232 |
2 |
Thomas |
4356 |
6 |
Michael |
1125 |
4 |
Hans |
3425 |
5 |