Sqlite3 Python -根据一列中的值向另一列添加值

l3zydbqr  于 2022-12-19  发布在  SQLite
关注(0)|答案(2)|浏览(130)

我有一个数据库CarSharing,其中包含表CarSharing。

create_table = '''CREATE TABLE CarSharing (
        Id INTEGER,
        Timestamp DATETIME,
        Season TEXT,
        Holiday TEXT, 
        Working_Day TEXT,
        Weather TEXT,
        Temp DECIMAL, 
        Temp_Feel DECIMAL, 
        Humidity INTEGER, 
        Windspeed DECIMAL, 
        Demand DECIMAL
        ); '

我已经修改了这个表,使其包含一个名为temp_category的新列:

addcolumn = "ALTER TABLE CarSharing ADD COLUMN temp_category varchar(10)"

现在我需要根据Temp_Feel列中的值为temp_category列添加字符串值,这样当Temp_Feel小于10时,temp_category列中的值为“冷”,如果在10-25之间,则为“温和”,如果大于25,则为“热”。
我在网上看过一些类似情况的例子,但似乎找不到一个符合这一点的。

columndata = "update CarSharing set temp_category = Case Temp_Feel WHEN 10> THEN 'Cold', WHEN 10<= 25>= THEN 'Mild', WHEN 25< THEN 'Hot'"

cur.execute(columndata)

我有一种感觉,我需要使用类似的东西,但我似乎不能得到正确的格式。

r8xiu3jd

r8xiu3jd1#

CASE表达式使用正确的语法:

UPDATE CarSharing 
SET temp_category = CASE 
  WHEN Temp_Feel < 10 THEN 'Cold'
  WHEN Temp_Feel <= 25 THEN 'Mild'
  WHEN Temp_Feel > 25 THEN 'Hot'
END
WHERE Temp_Feel IS NOT NULL;

或者:

UPDATE CarSharing 
SET temp_category = CASE 
  WHEN Temp_Feel < 10 THEN 'Cold'
  WHEN Temp_Feel <= 25 THEN 'Mild'
  ELSE 'Hot'
END
WHERE Temp_Feel IS NOT NULL;
4zcjmb1e

4zcjmb1e2#

另一种方法是添加一个自动计算值的generated column

-- Drop the existing column*.
ALTER TABLE CarSharing DROP COLUMN temp_category;

-- Add the computed column†.
ALTER TABLE CarSharing
  ADD COLUMN temp_category VARCHAR(10)
    GENERATED ALWAYS AS
      (
        CASE
          WHEN Temp_Feel < 10 THEN 'Cold'
          WHEN Temp_Feel <= 25 THEN 'Mild'
          ELSE 'Hot'
        END
      );
  • SQLite 3.35之前的版本不支持删除列。

†计算列可以是STORED,表示在插入或更新记录时将值写入数据库,也可以是VIRTUAL,表示在查询表时计算值。ALTER TABLE / ADD COLUMN只支持添加VIRTUAL列。

相关问题