簡體   English   中英

SQLite 將每一行除以另一個表中同一行的值

[英]SQLite divide each row by values of the same row from another table

那么如何獲取表中的每一行並將該行的每一列值除以另一個表中的相應值

說我有一個 table_one

      A    B    C
0     12    20    12

和 table_two

date        A    B    C
01/01/19    6    10   3  
02/01/19    12   5    6

並通過將 table_two 中每一行中的每個單元格除以 table_one 中的相應值來制作新表

date        A    B      C
01/01/19    0.5  0.5    0.25  
02/01/19    1    0.25   0.5

我想過使用像這樣的 INNER JOIN

"""INSERT INTO newtable( date, A, B, C) 
      SELECT t.date,
             t.A / s.A
             t.B / s.B
             t.C / s.C
      FROM table_two t
      INNER JOIN table_one s
      ON ;"""  

但是我不認為這是正確的,因為我不知道我會在 ON 聲明之后放什么?

如果您希望計算直接跨行運行(第二個表的第一個元素除以第一個表的第一個元素,...)那么您可以給出一個數字 ID(每行的自動增量) 列添加到每個表,然后加入該編號 ID。

這將要求使用此 ID 列重新創建表,在頂部看起來像這樣:

  CREATE TABLE table1 (
  id INT NOT NULL AUTO_INCREMENT, ...

你在那里也包括一個日期。 如果您想對日期執行計算,如果日期是唯一的,它就可以工作。

對於第一種情況,您的 INSERT 語句將像這樣結束:

  FROM table_two t
  INNER JOIN table_one s
  ON t.id = s.id;

如果場景是日期列連接,那么它將是:

  FROM table_two t
  INNER JOIN table_one s
  ON t.date = s.date;

這是假設你的表有像 (id, date, A, B, C) 這樣的列

我希望這至少能給你一些想法。

如何獲取表中的每一行並將該行的每一列值除以另一個表中的相應值?

對應什么?

在您發布的關於table_one的示例數據中,該行的開頭有一個0
這是否意味着表中只有 1 行,並且永遠只有 1 行?

如果答案是肯定的,那么您需要在表之間進行CROSS JOIN連接,它將table_two的唯一行連接到table_one的每一行:

INSERT INTO newtable( date, A, B, C) 
SELECT t.date,
  t.A / s.A,
  t.B / s.B,
  t.C / s.C
FROM table_two t CROSS JOIN table_one s

如果答案是否定的,那么您需要在INNER JOINON子句中設置一個條件:

INSERT INTO newtable( date, A, B, C) 
SELECT t.date,
  t.A / s.A,
  t.B / s.B,
  t.C / s.C
FROM table_two t INNER JOIN table_one s
ON s.somecolumn = t.othercolumn

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM