mysql - SQL中长向量的总和

标签 mysql sql

我知道在 SQL 中计算稀疏点积很容易,但是求和(对于非常长的向量)的最佳方法是什么?

一个连接是不够的,因为如果一个坐标填充在一个向量中但没有填充在另一个向量中,它将被忽略。

因此,我用 PHP 循环计算总和...这是一个非常愚蠢的想法。

我目前正在考虑填充缺失的 0 以准备内部联接,但是否有捷径(如将 NULL 转换为 0 的外部联接)?

编辑。这是我的向量表的结构:

CREATE TABLE `eigaki_vectors` (
  `name` varchar(2) COLLATE utf8_unicode_ci NOT NULL,
  `i1` int(10) NOT NULL,
  `i2` int(10) NOT NULL,
  `value` double NOT NULL,
  UNIQUE KEY `key` (`name`,`i1`,`i2`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

在这种特殊情况下,向量由索引组成:v_{i_1, i_2},但这与问题无关。

我希望做类似的事情(感谢 xQbert):

SELECT v1.i1, v1.i2, isNull(v1.value, 0) + isNull(v2.value, 0)
FROM eigaki_vectors v1 FULL OUTER JOIN eigaki_vectors v2
ON v1.i1 = v2.i1 AND v1.i2 = v2.i2
AND v1.name = 'a' AND v2.name = 'b'

添加向量ab。但是 FULL OUTER JOIN 在 MySQL 上不存在,而且我认为我对 name 列很笨拙。有什么想法吗?

最佳答案

coalesce(Field,OtherField, AnotherField,0)

coalesce 基本上是一个 if then forever... 它从您的变量列表中选择第一个非空值

isNull 做同样的事情,但只针对 2 个值

isNull(Field,0)

关于mysql - SQL中长向量的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8151986/

相关文章:

sql - 如何将 select 语句的结果集插入到嵌套表中?

sql - 如何查询共享另一个值的值

mysql - SQL如何在分组行中获取表中列的最大值的行

mysql - 我已经对组合列建立了索引,是否也应该对单独的列建立索引?

php - 更改日期的顺序以在上方显示最新的,在下方显示最早的

php - mysql计算两个数的区别

php - 从 MySQL 查询构建数组?

mysql - 将 mysql 调用简化为 1 次更新

c++ - SQLite3 C++ 查询靠近 "CASE": syntax error

mysql - SQL查询返回错误数据,很奇怪