У меня есть следующий оператор SQL для выбора ежемесячных продаж каждого продукта, хранящегося в моей базе данных. Продукт выбирается на основе пользовательского ввода. Запрос работает для этой таблицы.
+------------+----------+-------+-------+-----------+
| orderDate | Espresso | Latte | Mocha | Cappucino |
+------------+----------+-------+-------+-----------+
| 2019-01-01 | 18 | 20 | 10 | 12 |
| 2019-01-02 | 13 | 11 | 20 | 10 |
| 2019-01-03 | 12 | 14 | 13 | 14 |
| 2019-01-04 | 20 | 13 | 15 | 14 |
| 2019-01-05 | 17 | 18 | 11 | 16 |
+------------+----------+-------+-------+-----------+
import sqlite3
title = input("Enter column to search")
sql = """SELECT SUM(sub.sales) as total_sales,
strftime("%m-%Y", sub.[orderDate]) as 'month-year'
FROM
(SELECT [orderDate], Espresso AS sales, 'Espresso' as item
FROM groupedSales
UNION ALL
SELECT [orderDate], Latte AS sales, 'Latte' as item
FROM groupedSales
UNION ALL
SELECT [orderDate], Mocha AS sales, 'Mocha' as item
FROM groupedSales
UNION ALL
SELECT [orderDate], Cappucino AS sales, 'Cappucino' as item
FROM groupedSales
UNION ALL
SELECT [orderDate], Americano AS sales, 'Americano' as item
FROM groupedSales
UNION ALL
) AS sub
WHERE sub.[item] = ? AND milkOptions = 'Soya'
GROUP BY strftime("%m-%Y", sub.[orderDate])
"""
conn=sqlite3.connect("system.db")
cur=conn.cursor()
aggregateIndividuals = cur.execute(sql, (title, milkOptions,)).fetchall()
valueArray = []
valueArray2 = []
for values in aggregateIndividuals:
print(values)
Вот типичный вывод:
Введите столбец для поискаEspresso
(494, '01 -2019 ')
(440,'02-2019 ')
(447, '03 -2019')
(447, '04 -2019 ')
(452, '05 -2019')
(439, '06 -2019 ')
(433, '07 -2019')
(482, '08 -2019 ')
(443, '09 -2019 ')
(440, '10 -2019')
(441, '11 -2019 ')
(458,'12-2019 ')
Однако приведенная выше таблица была тестовыми данными и не представляет формат моей фактической таблицы, которая подается в заказах клиентов. Как мне адаптировать запрос, чтобы выбрать ежемесячные продажи каждого продукта из новой таблицы, если в заголовке продукта нет ячеек с названием продукта, а есть ячейки с названием продукта. Вот моя фактическая таблица, в которой я хотел бы использовать этот запрос:
+---------+-----------+--------+-------------+------------+----------+-------+------------+
| orderid | product | size | milkOptions | orderDate | quantity | price | customerid |
+---------+-----------+--------+-------------+------------+----------+-------+------------+
| 1 | Espresso | Small | Soya | 2019-10-29 | 1 | 1.0 | 1 |
| 2 | Cappucino | Small | SemiSkimmed | 2019-10-29 | 1 | 1.0 | 1 |
| 3 | Cappucino | Small | SemiSkimmed | 2019-10-29 | 1 | 1.0 | 1 |
| 4 | Cappucino | Medium | SemiSkimmed | 2019-10-29 | 1 | 1.0 | 1 |
+---------+-----------+--------+-------------+------------+----------+-------+------------+
Я использую DB Browser для SQlite3. ДЛЯ ЗАМЕЧАНИЯ: я сократил записи в обеих базах данных, чтобы минимально воспроизвести это, но есть запись для каждого дня года в столбце orderDate в моем реальном браузере, и есть другие примеры различных продуктов, заказанных во второй таблице,но я сократил это для этого примера.