Как создать 3 новых столбца из кода продукта, имени продукта и средней цены в sqlite - PullRequest
0 голосов
/ 06 октября 2019

Я пытаюсь создать новый подзапрос и добавить столбцы из него в уже существующую таблицу. Я хочу, чтобы в этих столбцах были установлены значения 1- Код продукта 2- Название продукта 3- Среднее значение цены покупки этого продукта, конечно, для которого необходимо условие WHERE, чтобы установить среднее значение цены продукта равнымзапись, которую дал пользователь.

Я уже пытался создать подзапрос, добавить его в таблицу и извлечь из него значения, чтобы назначить его цене продажи, как показано в коде ниже. Название основной таблицыis store2

c.execute('''UPDATE  store2 
        INNER JOIN 
        (
            SELECT  Product_Name, AVG(Unit_Buying_Price) 
            FROM    store2 
            GROUP BY Product_Name
        ) average2 ON store2.Product_Name = average2.Product_Name
SET     store2.Unit_Buying_Price = average2.AVG(Unit_Buying_Price)
WHERE   store2.Product_Code = ? ''',(Product_Codev.get()))

Новые добавленные столбцы должны находиться в таблице с именем Average2. Цена покупки указывается пользователем через текстовое поле. Новые столбцы должны создаваться в конце таблицы для каждого кода продукта. должно быть средним от покупной цены этого продукта. так будет выглядеть Product_Name |Avg_Price ----------------- Monitor | 100 $

, а затем эти 100 $ должны быть назначены уже существующему столбцу с именем Unit_Sell_Price

Когда я пытаюсь код выше, это дает мне это

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\FUJITSU\AppData\Local\Programs\Python\Python37-32\lib\tkinter\_
_init__.py", line 1705, in __call__
    return self.func(*args)
  File "stores.py", line 155, in submit
    WHERE   store2.Product_Code = ? ''',(Product_Codev.get()))
sqlite3.OperationalError: near "INNER": syntax error

1 Ответ

0 голосов
/ 06 октября 2019

Рассчитать средние значения в CTE и обновить таблицу:

WITH cte AS (
  SELECT Product_Name, AVG(Unit_Buying_Price) AS AveragePrice 
  FROM store2 
  GROUP BY Product_Name
)
UPDATE store2
SET Unit_Selling_Price = (
  SELECT AveragePrice
  FROM cte
  WHERE Product_Name = store2.Product_Name
);

Или без CTE:

UPDATE store2
SET Unit_Selling_Price = (
  SELECT AVG(s.Unit_Buying_Price)
  FROM store2 AS s
  WHERE s.Product_Name = store2.Product_Name
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...