Как использовать вложенные запросы для управления матрицей в sql?

#sql #subquery

#sql #подзапрос

Вопрос:

Я только начал изучать sql и в настоящее время работаю над умножением матриц. У меня возникли проблемы с пониманием того, как использовать вложенный запрос в результате для выполнения матричного питания. (например, как A ^ 3) Должен ли я поместить подзапрос в предложение FROM или WHERE ? Ниже приведена моя попытка, и я получаю синтаксическую ошибку рядом с «(» на sqlite, что не очень полезно

 SELECT A.i, A.j, SUM(A.val * A.val) AS val
FROM A, (SELECT A.i, A.j SUM(A.val * A.val) AS val
        FROM A
        WHERE A.i = A.i
        GROUP BY A.i, A.j) AS B
WHERE A.i = B.j 
GROUP BY A.i, B.j
  

Комментарии:

1. Это не ответ на более широкий вопрос, но из-за синтаксической ошибки, я думаю, вам не хватает запятой во второй строке A.j SUM(A.val * A.val) A.j, SUM(A.val * A.val) . Это WHERE A.i = A.i также кажется немного странным.

Ответ №1:

Умножение матрицы в SQL будет выглядеть следующим образом:

 select a.i, a.j,
       (select sum(rows.val * cols.val)
        from a rows cross join
             a cols
        where rows.i = a.i and
              cols.j = a.j and
              rows.j = cols.i
       ) as val
from a;
  

Комментарии:

1. Необходимо ли использовать подзапрос для A ^ 2? Для A * B я использую SELECT A.i, B.j, SUM(A.val * B.val) КАК val ИЗ A, B, ГДЕ A.j = B.i ГРУППИРУЮ ПО A.i, B.j; И я до сих пор не знаю, как сделать A ^ 3

2. @Han . . . Нет, но, на мой взгляд, проще сделать это с помощью подзапроса. Для большей мощности вы просто повторили бы логику умножения. Ничто не требует, чтобы a ссылки в подзапросе были той же таблицей, a что и во внешнем запросе.