SQLite делит каждую строку по значениям той же строки из другой таблицы - PullRequest
0 голосов
/ 28 сентября 2019

Так как взять каждую строку в таблице и разделить каждое значение столбца для этой строки на соответствующее значение в другой таблице

скажем, у меня есть 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?

Ответы [ 2 ]

0 голосов
/ 28 сентября 2019

как взять каждую строку в таблице и разделить каждое значение столбца для этой строки на соответствующее значение в другой таблице?

Соответствует чему?В приведенных вами примерах данных о table_one в начале строки стоит 0.Означает ли это, что в таблице есть только 1 строка и всегда будет только 1 строка?Если ответ да , то вам нужно CROSS JOIN между таблицами, который соединит единственную строку table_one с каждой строкой table_two:

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

Еслиответ нет тогда вам нужно установить условие в предложении ON 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 s.somecolumn = t.othercolumn
0 голосов
/ 28 сентября 2019

Если вы хотите, чтобы вычисление выполнялось непосредственно по строкам (с первым элементом второй таблицы, разделенным на первый элемент первой таблицы, ...), то вы могли бы дать числовой идентификатор (который автоматически увеличиваетсядля каждой строки) столбец к каждой таблице, а затем присоединиться к этому номеру.

Это потребует воссоздания таблицы с этим столбцом идентификатора, который будет выглядеть следующим образом:

  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, дата, A, B, C)

Я надеюсь, что, по крайней мере, это даст вам некоторое представление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...