Объединение результатов нескольких операторов 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, но не уверен, как это сделать.
любая помощь или предложения будут очень признательны