Examples
Query All Department Information
scala
val q = query:
from[Department]
Query Employee Information Hired After January 1, 2020
scala
val q = query:
from[Employee]
.filter(e => e.hireDate > LocalDate.of(2020, 1, 1))
Query Employee Names and Corresponding Department Names
scala
val q = query:
from[Employee]
.join[Department]((e, d) => e.departmentId == d.id)
.map((e, d) => (employeeName = e.name, departmentName = d.name))
Given an Employee ID, Query All Employees with Higher Salaries
scala
val employeeId: Int = ???
val q = query:
val querySalary = from[Employee]
.filter(_.id == employeeId)
.map(_.salary)
from[Employee]
.filter(_.salary > querySalary)
.map(e => (id = e.id, name = e.name))
Calculate Average Salary by Department
scala
val q = query:
from[Employee]
.groupBy(e => (deptId = e.departmentId))
.map((g, e) => (deptId = g.deptId, salary = avg(e.salary)))
Query id of Department with At Least One Employee
scala
val q = query:
from[Department]
.leftJoin[Employee]((d, e) => d.id == e.departmentId)
.groupBy((d, _) => (id = d.id))
.having((_, _) => count() > 0)
.map((g, _) => g.id)
Query All Employees and Their Managers' Names
scala
val q = query:
from[Employee]
.leftJoin[Employee]((e1, e2) => e1.managerId == e2.id)
.map((e1, e2) => (name = e1.name, managerName = e2.name))
Query Top 3 Highest-Paid Employees by Department
scala
val q = query:
val subquery = from[Employee]
.join[Department]((e, d) => e.departmentId == d.id)
.map: (e, d) =>
(
employeeName = e.name,
departmentName = d.name,
rank = denseRank() over (partitionBy (d.id) sortBy (e.salary.desc))
)
fromQuery(subQuery).filter(r => r.rank <= 3)
Calculate Employee's Days Since Hire
scala
import scala.language.postfixOps
val q = query:
from[Employee].map: e =>
extract(day from (now() - e.hireDate))
Rank Employee's Income
scala
val q = query:
from[Employee]
.map: e =>
(
name = e.name,
income =
`if` e.salary >= 50000 `then` "High"
`else if` e.salary >= 20000 && e.salary < 50000 `then` "Medium"
`else` "Low"
)
Find Employees with Salaries Higher Than Department Average
scala
val q = query:
from[Employee]
.filter: e1 =>
e1.salary >
from[Employee]
.filter(e2 => e1.departmentId == e2.departmentId)
.map(e2 => avg(e2.salary))