mysql - 这个矩阵乘法在 SQL 中是如何工作的?

标签 mysql sql matrix group-by sum

完全公开,我是 SQL 菜鸟

给定两个稀疏矩阵A和B,定义为:

A(行号、列号、值)和 B(行号、列号、值)

我不明白这个查询如何表示两个矩阵的乘法:

SELECT A.row_number, B.column_number, SUM(A.value * B.value)
FROM A, B
WHERE A.column_number = B.row_number
GROUP BY A.row_number, B.column_number

我的困惑在于 SUM 语法和 GROUP BY/SELECT 语法

所以对于我的 GROUP BY/SELECT 混淆,我不明白为什么表达式

A.row_number 和 B.column_number 是 SELECT 语句后必需的

当我们已经在使用 SELECT 和 WHERE 时,为什么还要指定它?对我来说,这似乎是在说我们想使用这些表达式(A.row_number 和 B.column_number)进行 SELECT,即使我们已经从 WHERE 返回了一个表。只说 SELECT * 不是更有意义吗?我假设 GROUP BY 只需要您输入它在 SELECT 语句中使用的表达式,但我不确定。

对于 SUM,我只想澄清一下,SUM 仅使用 WHERE 返回的 A.value 和 B.value 对吗?否则,您会将所有 A.value 与所有 B.value 相乘。

澄清其中任何一个都会非常有帮助。谢谢!

最佳答案

create table A
(   column_number int,
    row_number int,
    value int
);
create table B
(   column_number int,
    row_number int,
    value int
);

insert A (column_number,row_number,value) values (1,1,1),(1,2,2),(2,1,3),(2,2,4);
insert B (column_number,row_number,value) values (1,1,10),(1,2,20),(2,1,30),(2,2,40);

具有旧样式(非显式)的数据没有聚合或分组依据:

SELECT A.row_number as Ar, B.column_number as Bc,
A.value as Av,B.value as Bv,A.value*B.value as product
FROM A, B
WHERE A.column_number = B.row_number

+------+------+------+------+---------+
| Ar   | Bc   | Av   | Bv   | product |
+------+------+------+------+---------+
|    1 |    1 |    1 |   10 |      10 |
|    2 |    1 |    2 |   10 |      20 |
|    1 |    1 |    3 |   20 |      60 |
|    2 |    1 |    4 |   20 |      80 |
|    1 |    2 |    1 |   30 |      30 |
|    2 |    2 |    2 |   30 |      60 |
|    1 |    2 |    3 |   40 |     120 |
|    2 |    2 |    4 |   40 |     160 |
+------+------+------+------+---------+

看到上面的内容,下面的内容就更清楚了:

SELECT A.row_number, B.column_number,sum(A.value * B.value) as theSum
FROM A, B
WHERE A.column_number = B.row_number
GROUP BY A.row_number, B.column_number
+------------+---------------+--------+
| row_number | column_number | theSum |
+------------+---------------+--------+
|          1 |             1 |     70 |
|          1 |             2 |    150 |
|          2 |             1 |    100 |
|          2 |             2 |    220 |
+------------+---------------+--------+

关于mysql - 这个矩阵乘法在 SQL 中是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31631752/

相关文章:

mysql - JOIN 与 UNION 与 IN() - 大表和许多 WHERE 条件

MySQL - 如何将列转为行?

mysql - 列出所有发送或接收消息的用户

mysql - SQL 查询选择前 14 个月,如果缺少任何月份,则添加金额 '0'

mysql - 我不断收到错误 : There is already an object named fk_driver_id and i'm not sure how to fix this error. 帮助:(

sql - 高级查询日期分组困境

python - 根据另一个数据框的条件填充 Pandas 数据框的有效方法

javascript - 验证二维数组每行长度相同的最快/最优雅的方法?

MATLAB - knnclassify 的用法

sql - 在sql中选择分组值