get_top = """ SELECT description, sku, level2, level3, rev, qty, tren from ( SELECT *, ROW_NUMBER () OVER ( PARTITION BY level2 ORDER BY SUM(revenue) DESC ) rownum, SUM(revenue) OVER (PARTITION BY level2) total, ROUND(SUM(revenue), 2) as rev, SUM(quantity) as qty, tren FROM ( select *, cast(past as float) / 3 as past, round( cast(present as float) /(cast(past as float) / 3.0), 2 ) as tren from ( select *, sum(quantity) FILTER ( WHERE year = {0} and month between {1} and {2} ) over (PARTITION BY description) as past, sum(quantity) FILTER ( WHERE year = {3} and month = {4} ) over (PARTITION BY description) as present from data ) ) where year = {3} and month = {4} GROUP BY description ORDER BY total DESC ) WHERE rownum <= 10 and revenue > 0 order by (sum(revenue) over ( partition by level2 )) desc; """.format(2022,1,2,2022,3) import sqlite3 conn = sqlite3.connect("data.db") res = conn.execute(get_top) print(res.description) for row in res.fetchall(): print(row)