Объединение результатов нескольких операторов SELECT и группировка по отдельным операторам SELECT

Я пытаюсь получить конкретные запасы, предоставленные по каждому поставщику в диапазоне дат и упорядоченные по убыванию:
примерно так

NAME     LOCATION       TYPE         STOCK PROVIDED
Tesco    Towcester      Supermarket  200g
Waitrose Towcester      Supermarket  g
SOFEA    Milton Keynes  Charity      g
Tesco    Daventry       Supermarket  g

В настоящее время я могу получить общий вес за период сбора следующим образом:

# Collections in date range - returns string list of collection ids in date range
        cursor.execute('SELECT id FROM app1_collection WHERE created_at BETWEEN %s AND %s AND larder_id = %s', [start_datetime, end_datetime, larder_id])
        collection_ids = re.findall(r'\d+', str(cursor.fetchall()))
        collection_ids_string = "'"+"','".join(collection_ids)+"'"
        print(collection_ids_string)

# Total weight of products in date range from collection ids
        cursor.execute("SELECT SUM(weight) FROM app1_product WHERE collection_id IN ("+collection_ids_string+")")
        total_weight_in = cursor.fetchone()[0]
        print(total_weight_in)

Моя таблица Products выглядит следующим образом:

id   name      weight  collection_id ...etc
1    twix      46.0    12
2    mars      540.0   11
3    coca-cola 330.0   11
etc...

Моя таблица Collection выглядит следующим образом:

id  created_at                  larder_id supplier_id  volunteer_id
1   2022-08-18 17:31:18.274780  1         3            1
2   2022-08-18 17:31:44.209567  1         3            1
etc...

Моя таблица поставщиков выглядит следующим образом:

id  name        addressFirstLine postCode Type      date                        created_at
1   Tesco       Towcester   NN12 7BA    Supermarket 2022-08-18 17:29:14.477425  2022-08-18 17:29:14.477450
2   Waitrose    Towcester   NN12 8AB    Supermarket 2022-08-18 17:29:30.119565  2022-08-18 17:29:30.119592
etc...

Моя текущая идея по созданию этого выглядит примерно так:

        # Collections in date range
        cursor.execute('SELECT id,larder_id FROM app1_collection WHERE created_at BETWEEN %s AND %s AND larder_id = %s GROUP BY id', [start_datetime, end_datetime, larder_id])
        collections = cursor.fetchall()
        print(collections)
        # Suppliers weight of products in date range from collections
        cursor.execute("SELECT SUM(weight) FROM app1_product WHERE collection_id IN ("+collection_ids_string+")GROUP BY id")


        

Я знаю, что мне нужно использовать GROUP BY и JOIN, но не уверен, как это сделать.

любая помощь или предложения будут очень признательны

Вернуться на верх