Find Median Given Frequency of Numbers

hard database sql

Problem

Numbers(value, frequency) tells how many times each value appears. Return the median.

Inputrows = [(0,7),(1,1),(2,3),(3,1)]
Output0.0
Sort by value; running cum. Median position(s) are at (total+1)/2 and (total/2)+1.

SELECT AVG(n.Number) AS median FROM Numbers n WHERE
  n.Frequency >= ABS((SELECT SUM(Frequency) FROM Numbers WHERE Number <= n.Number)
                   - (SELECT SUM(Frequency) FROM Numbers WHERE Number >= n.Number));
Time: O(n log n) Space: O(1)