MechanicalRabbit / FunSQL.jl

Julia library for compositional construction of SQL queries
https://mechanicalrabbit.github.io/FunSQL.jl
Other
150 stars 6 forks source link

deduplicate aggregates #10

Closed xitology closed 3 years ago

xitology commented 3 years ago
using FunSQL: SQLTable, From, Select, Join, Where, Group, Fun, Get, Agg, render
person = SQLTable(:person, :person_id, :year_of_birth, :location_id)
visit_occurrence = SQLTable(:visit_occurrence, :visit_occurrence_id, :person_id, :visit_start_date, :visit_end_date)
q = From(person) |>
    Join(:visit_group => From(visit_occurrence) |> Group(Get.person_id), on = Get.person_id .== Get.visit_group.person_id) |>
    Where(Agg.count(over = Get.visit_group) .>= 2) |>
    Select(Get.person_id, Agg.count(over = Get.visit_group))
print(render(q))
#=>
SELECT "person_1"."person_id", "visit_group_1"."count_2" AS "count"
FROM "person" AS "person_1"
JOIN (
  SELECT "visit_occurrence_1"."person_id", COUNT(*) AS "count_1", COUNT(*) AS "count_2"
  FROM "visit_occurrence" AS "visit_occurrence_1"
  GROUP BY "visit_occurrence_1"."person_id"
) AS "visit_group_1" ON ("person_1"."person_id" = "visit_group_1"."person_id")
WHERE ("visit_group_1"."count_1" >= 2)
=#
xitology commented 3 years ago

Fixed in 5db345e.