  Analytical SQL is widely used in modern database applications and data
analysis. However, its partitioning and grouping operators are challenging for
novice users. Unfortunately, programming by example, shown effective on
standard SQL, are less attractive because examples for analytical queries are
more laborious to solve by hand.
  To make demonstrations easier to create, we designed a new end-user
specification, programming by computation demonstration, that allows the user
to demonstrate the task using a (possibly incomplete) cell-level computation
trace. This specification is exploited in a new abstraction-based synthesis
algorithm to prove that a partially formed query cannot be completed to satisfy
the specification, allowing us to prune the search space.
  We implemented our approach in a tool named Sickle and tested it on 80
real-world analytical SQL tasks. Results show that even from small
demonstrations, Sickle can solve 76 tasks, in 12.8 seconds on average, while
the prior approaches can solve only 60 tasks and are on average 22.5x slower.
Our user study with 13 participants reveals that our specification increases
user efficiency and confidence on challenging tasks.
